Annotation of sbbs/smblib/smbstr.c, revision 1.1

1.1     ! root        1: /* smbstr.c */
        !             2: 
        !             3: /* Synchronet message base (SMB) library routines returning strings */
        !             4: 
        !             5: /* $Id: smbstr.c,v 1.7 2004/11/16 21:10:03 rswindell Exp $ */
        !             6: 
        !             7: /****************************************************************************
        !             8:  * @format.tab-size 4          (Plain Text/Source Code File Header)                    *
        !             9:  * @format.use-tabs true       (see http://www.synchro.net/ptsc_hdr.html)              *
        !            10:  *                                                                                                                                                     *
        !            11:  * Copyright 2004 Rob Swindell - http://www.synchro.net/copyright.html         *
        !            12:  *                                                                                                                                                     *
        !            13:  * This library is free software; you can redistribute it and/or                       *
        !            14:  * modify it under the terms of the GNU Lesser General Public License          *
        !            15:  * as published by the Free Software Foundation; either version 2                      *
        !            16:  * of the License, or (at your option) any later version.                                      *
        !            17:  * See the GNU Lesser General Public License for more details: lgpl.txt or     *
        !            18:  * http://www.fsf.org/copyleft/lesser.html                                                                     *
        !            19:  *                                                                                                                                                     *
        !            20:  * Anonymous FTP access to the most recent released source is available at     *
        !            21:  * ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net     *
        !            22:  *                                                                                                                                                     *
        !            23:  * Anonymous CVS access to the development source and modification history     *
        !            24:  * is available at cvs.synchro.net:/cvsroot/sbbs, example:                                     *
        !            25:  * cvs -d :pserver:[email protected]:/cvsroot/sbbs login                       *
        !            26:  *     (just hit return, no password is necessary)                                                     *
        !            27:  * cvs -d :pserver:[email protected]:/cvsroot/sbbs checkout src                *
        !            28:  *                                                                                                                                                     *
        !            29:  * For Synchronet coding style and modification guidelines, see                                *
        !            30:  * http://www.synchro.net/source.html                                                                          *
        !            31:  *                                                                                                                                                     *
        !            32:  * You are encouraged to submit any modifications (preferably in Unix diff     *
        !            33:  * format) via e-mail to [email protected]                                                                      *
        !            34:  *                                                                                                                                                     *
        !            35:  * Note: If this box doesn't appear square, then you need to fix your tabs.    *
        !            36:  ****************************************************************************/
        !            37: 
        !            38: #include <genwrap.h>           /* stricmp */
        !            39: #include "smblib.h"
        !            40: 
        !            41: char* SMBCALL smb_hfieldtype(ushort type)
        !            42: {
        !            43:        static char str[8];
        !            44: 
        !            45:        switch(type) {
        !            46:                case SENDER:                    return("Sender");
        !            47:                case SENDERAGENT:               return("SenderAgent");
        !            48:                case SENDERNETTYPE:             return("SenderNetType");
        !            49:                case SENDERNETADDR:             return("SenderNetAddr");
        !            50:                case SENDEREXT:                 return("SenderExt");
        !            51:                case SENDERORG:                 return("SenderOrg");
        !            52:                case SENDERIPADDR:              return("SenderIpAddr");
        !            53:                case SENDERHOSTNAME:    return("SenderHostName");
        !            54:                case SENDERPROTOCOL:    return("SenderProtocol");
        !            55:                case SENDERPORT:                return("SenderPort");
        !            56: 
        !            57:                case REPLYTO:                   return("ReplyTo");
        !            58:                case REPLYTOAGENT:              return("ReplyToAgent");
        !            59:                case REPLYTONETTYPE:    return("ReplyToNetType");
        !            60:                case REPLYTONETADDR:    return("ReplyToNetAddr");
        !            61:                case REPLYTOEXT:                return("ReplyToExt");
        !            62:                                                                
        !            63:                case RECIPIENT:                 return("Recipient");
        !            64:                case RECIPIENTAGENT:    return("RecipientAgent");
        !            65:                case RECIPIENTNETTYPE:  return("RecipientNetType");
        !            66:                case RECIPIENTNETADDR:  return("RecipientNetAddr");
        !            67:                case RECIPIENTEXT:              return("RecipientExt");
        !            68: 
        !            69:                case SUBJECT:                   return("Subject");
        !            70:                case SMB_SUMMARY:               return("Summary");
        !            71:                case SMB_COMMENT:               return("Comment");
        !            72:                case SMB_CARBONCOPY:    return("CarbonCopy");
        !            73:                case SMB_GROUP:                 return("Group");
        !            74:                case SMB_EXPIRATION:    return("Expiration");
        !            75:                case SMB_PRIORITY:              return("Priority");
        !            76:                case SMB_COST:                  return("Cost");
        !            77: 
        !            78:                case FIDOCTRL:                  return("FidoCtrl");
        !            79:                case FIDOAREA:                  return("FidoArea");
        !            80:                case FIDOSEENBY:                return("FidoSeenBy");
        !            81:                case FIDOPATH:                  return("FidoPath");
        !            82:                case FIDOMSGID:                 return("FidoMsgID");
        !            83:                case FIDOREPLYID:               return("FidoReplyID");
        !            84:                case FIDOPID:                   return("FidoPID");
        !            85:                case FIDOFLAGS:                 return("FidoFlags");
        !            86:                case FIDOTID:                   return("FidoTID");
        !            87: 
        !            88:                case RFC822HEADER:              return("RFC822Header");
        !            89:                case RFC822MSGID:               return("RFC822MsgID");
        !            90:                case RFC822REPLYID:             return("RFC822ReplyID");
        !            91:                case RFC822TO:                  return("RFC822To");
        !            92:                case RFC822FROM:                return("RFC822From");
        !            93:                case RFC822REPLYTO:             return("RFC822ReplyTo");
        !            94: 
        !            95:                case USENETPATH:                return("UsenetPath");
        !            96:                case USENETNEWSGROUPS:  return("UsenetNewsgroups");
        !            97: 
        !            98:                case SMTPCOMMAND:               return("SMTPCommand");
        !            99:                case SMTPREVERSEPATH:   return("SMTPReversePath");
        !           100: 
        !           101:                case SMTPSYSMSG:                return("SMTPSysMsg");
        !           102: 
        !           103:                case UNKNOWN:                   return("UNKNOWN");
        !           104:                case UNKNOWNASCII:              return("UNKNOWNASCII");
        !           105:                case UNUSED:                    return("UNUSED");
        !           106:        }
        !           107:        sprintf(str,"%02Xh",type);
        !           108:        return(str);
        !           109: }
        !           110: 
        !           111: ushort SMBCALL smb_hfieldtypelookup(const char* str)
        !           112: {
        !           113:        ushort type;
        !           114: 
        !           115:        if(isdigit(*str))
        !           116:                return((ushort)strtol(str,NULL,0));
        !           117: 
        !           118:        for(type=0;type<=UNUSED;type++)
        !           119:                if(stricmp(str,smb_hfieldtype(type))==0)
        !           120:                        return(type);
        !           121: 
        !           122:        return(UNKNOWN);
        !           123: }
        !           124: 
        !           125: char* SMBCALL smb_dfieldtype(ushort type)
        !           126: {
        !           127:        static char str[8];
        !           128: 
        !           129:        switch(type) {
        !           130:                case TEXT_BODY: return("TEXT_BODY");
        !           131:                case TEXT_TAIL: return("TEXT_TAIL");
        !           132:                case UNUSED:    return("UNUSED");
        !           133:        }
        !           134:        sprintf(str,"%02Xh",type);
        !           135:        return(str);
        !           136: }
        !           137: 
        !           138: char* SMBCALL smb_hashsourcetype(uchar type)
        !           139: {
        !           140:        static char str[8];
        !           141: 
        !           142:        switch(type) {
        !           143:                case SMB_HASH_SOURCE_BODY:              return(smb_dfieldtype(TEXT_BODY));
        !           144:                case SMB_HASH_SOURCE_MSG_ID:    return(smb_hfieldtype(RFC822MSGID));
        !           145:                case SMB_HASH_SOURCE_FTN_ID:    return(smb_hfieldtype(FIDOMSGID));
        !           146:        }
        !           147:        sprintf(str,"%02Xh",type);
        !           148:        return(str);
        !           149: }
        !           150: 
        !           151: char* SMBCALL smb_hashsource(smbmsg_t* msg, int source)
        !           152: {
        !           153:        switch(source) {
        !           154:                case SMB_HASH_SOURCE_MSG_ID:
        !           155:                        return(msg->id);
        !           156:                case SMB_HASH_SOURCE_FTN_ID:
        !           157:                        return(msg->ftn_msgid);
        !           158:        }
        !           159:        return("hash");
        !           160: }
        !           161: 
        !           162: /****************************************************************************/
        !           163: /* Converts when_t.zone into ASCII format                                   */
        !           164: /****************************************************************************/
        !           165: char* SMBCALL smb_zonestr(short zone, char* outstr)
        !           166: {
        !           167:        char*           plus;
        !           168:     static char str[32];
        !           169: 
        !           170:        switch((ushort)zone) {
        !           171:                case 0:     return("UTC");
        !           172:                case AST:   return("AST");
        !           173:                case EST:   return("EST");
        !           174:                case CST:   return("CST");
        !           175:                case MST:   return("MST");
        !           176:                case PST:   return("PST");
        !           177:                case YST:   return("YST");
        !           178:                case HST:   return("HST");
        !           179:                case BST:   return("BST");
        !           180:                case ADT:   return("ADT");
        !           181:                case EDT:   return("EDT");
        !           182:                case CDT:   return("CDT");
        !           183:                case MDT:   return("MDT");
        !           184:                case PDT:   return("PDT");
        !           185:                case YDT:   return("YDT");
        !           186:                case HDT:   return("HDT");
        !           187:                case BDT:   return("BDT");
        !           188:                case MID:   return("MID");
        !           189:                case VAN:   return("VAN");
        !           190:                case EDM:   return("EDM");
        !           191:                case WIN:   return("WIN");
        !           192:                case BOG:   return("BOG");
        !           193:                case CAR:   return("CAR");
        !           194:                case RIO:   return("RIO");
        !           195:                case FER:   return("FER");
        !           196:                case AZO:   return("AZO");
        !           197:                case LON:   return("LON");
        !           198:                case BER:   return("BER");
        !           199:                case ATH:   return("ATH");
        !           200:                case MOS:   return("MOS");
        !           201:                case DUB:   return("DUB");
        !           202:                case KAB:   return("KAB");
        !           203:                case KAR:   return("KAR");
        !           204:                case BOM:   return("BOM");
        !           205:                case KAT:   return("KAT");
        !           206:                case DHA:   return("DHA");
        !           207:                case BAN:   return("BAN");
        !           208:                case HON:   return("HON");
        !           209:                case TOK:   return("TOK");
        !           210:                case SYD:   return("SYD");
        !           211:                case NOU:   return("NOU");
        !           212:                case WEL:   return("WEL");
        !           213:                }
        !           214: 
        !           215:        if(!OTHER_ZONE(zone)) {
        !           216:                if(zone&(WESTERN_ZONE|US_ZONE)) /* West of UTC? */
        !           217:                        zone=-(zone&0xfff);
        !           218:                else
        !           219:                        zone&=0xfff;
        !           220:        }
        !           221: 
        !           222:        if(zone>0)
        !           223:                plus="+";
        !           224:        else
        !           225:                plus="";
        !           226:        sprintf(str,"UTC%s%d:%02u", plus, zone/60, zone<0 ? (-zone)%60 : zone%60);
        !           227: 
        !           228:        if(outstr==NULL)
        !           229:                return(str);
        !           230:        strcpy(outstr,str);
        !           231:        return(outstr);
        !           232: }
        !           233: 
        !           234: /****************************************************************************/
        !           235: /* Returns an ASCII string for FidoNet address 'addr'                       */
        !           236: /****************************************************************************/
        !           237: char* SMBCALL smb_faddrtoa(fidoaddr_t* addr, char* outstr)
        !           238: {
        !           239:        static char str[64];
        !           240:     char point[25];
        !           241: 
        !           242:        if(addr==NULL)
        !           243:                return("0:0/0");
        !           244:        sprintf(str,"%hu:%hu/%hu",addr->zone,addr->net,addr->node);
        !           245:        if(addr->point) {
        !           246:                sprintf(point,".%hu",addr->point);
        !           247:                strcat(str,point); 
        !           248:        }
        !           249:        if(outstr==NULL)
        !           250:                return(str);
        !           251:        strcpy(outstr,str);
        !           252:        return(outstr);
        !           253: }
        !           254: 
        !           255: /****************************************************************************/
        !           256: /* Returns the FidoNet address parsed from str.                                                                */
        !           257: /****************************************************************************/
        !           258: fidoaddr_t SMBCALL smb_atofaddr(const fidoaddr_t* sys_addr, const char *str)
        !           259: {
        !           260:        char *p;
        !           261:        fidoaddr_t addr;
        !           262:        fidoaddr_t tmp_addr={1,1,1,0};  /* Default system address: 1:1/1.0 */
        !           263: 
        !           264:        if(sys_addr==NULL)
        !           265:                sys_addr=&tmp_addr;
        !           266: 
        !           267:        ZERO_VAR(addr);
        !           268:        if((p=strchr(str,':'))!=NULL) {
        !           269:                addr.zone=atoi(str);
        !           270:                addr.net=atoi(p+1); 
        !           271:        } else {
        !           272:                addr.zone=sys_addr->zone;
        !           273:                addr.net=atoi(str);
        !           274:        }
        !           275:        if(addr.zone==0)              /* no such thing as zone 0 */
        !           276:                addr.zone=1;
        !           277:        if((p=strchr(str,'/'))!=NULL)
        !           278:                addr.node=atoi(p+1);
        !           279:        else {
        !           280:                if(addr.zone==sys_addr->zone)
        !           281:                        addr.net=sys_addr->net;
        !           282:                addr.node=atoi(str); 
        !           283:        }
        !           284:        if((p=strchr(str,'.'))!=NULL)
        !           285:                addr.point=atoi(p+1);
        !           286:        return(addr);
        !           287: }
        !           288: 
        !           289: /****************************************************************************/
        !           290: /* Returns ASCIIZ representation of network address (net_t)                                    */
        !           291: /****************************************************************************/
        !           292: char* SMBCALL smb_netaddr(net_t* net)
        !           293: {
        !           294:        if(net->type==NET_FIDO)
        !           295:                return(smb_faddrtoa((fidoaddr_t*)net->addr,NULL));
        !           296:        return(net->addr);
        !           297: }
        !           298: 
        !           299: /****************************************************************************/
        !           300: /* Returns net_type for passed e-mail address (i.e. "user@addr")                       */
        !           301: /****************************************************************************/
        !           302: ushort SMBCALL smb_netaddr_type(const char* str)
        !           303: {
        !           304:        char*   p;
        !           305:        char*   tp;
        !           306: 
        !           307:        if((p=strchr(str,'@'))==NULL)
        !           308:                return(NET_NONE);
        !           309: 
        !           310:        p++;
        !           311:        SKIP_WHITESPACE(p);
        !           312:        if(*p==0)
        !           313:                return(NET_UNKNOWN);
        !           314: 
        !           315:        if(isalpha(*p) && strchr(p,'.')==NULL)
        !           316:                return(NET_QWK);
        !           317: 
        !           318:        for(tp=p;*tp;tp++) {
        !           319:                if(!isdigit(*tp) && *tp!=':' && *tp!='/' && *tp!='.')
        !           320:                        break;
        !           321:        }
        !           322:        if(isdigit(*p) && *tp)
        !           323:                return(NET_FIDO);
        !           324:        if(isalnum(*p))
        !           325:                return(NET_INTERNET);
        !           326: 
        !           327:        return(NET_UNKNOWN);
        !           328: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.