From a760467d9d5e711d695611a007328726e97a61dd Mon Sep 17 00:00:00 2001 From: rswindell <> Date: Sun, 6 Dec 2015 11:08:41 +0000 Subject: [PATCH] smb_hfield_add_netaddr(), and by extension, the smb_hfield_netaddr() macro, If the specified or detected net_type is not Internet, only store the address portion of the email address in the *NETADDR hfield. If the net_type argument is a NULL pointer, automatically add the *NETTYPE hfield too. New functions: - smb_netaddr_type() - returns the string/name of a specified net_type. - smb_get_net_type_by_addr() - parses just the network address field. Change short/ushort's to int16_t/uint16_t's. Remove date from copyright. --- src/smblib/smbadd.c | 2 +- src/smblib/smballoc.c | 6 +-- src/smblib/smbdump.c | 4 +- src/smblib/smbfile.c | 2 +- src/smblib/smbhash.c | 2 +- src/smblib/smblib.c | 90 +++++++++++++++++++++++++++---------------- src/smblib/smblib.h | 33 ++++++++-------- src/smblib/smbstr.c | 59 ++++++++++++++++++++++------ 8 files changed, 128 insertions(+), 70 deletions(-) diff --git a/src/smblib/smbadd.c b/src/smblib/smbadd.c index 38769fef1c..56f6487132 100644 --- a/src/smblib/smbadd.c +++ b/src/smblib/smbadd.c @@ -8,7 +8,7 @@ * @format.tab-size 4 (Plain Text/Source Code File Header) * * @format.use-tabs true (see http://www.synchro.net/ptsc_hdr.html) * * * - * Copyright 2012 Rob Swindell - http://www.synchro.net/copyright.html * + * Copyright Rob Swindell - http://www.synchro.net/copyright.html * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public License * diff --git a/src/smblib/smballoc.c b/src/smblib/smballoc.c index 6732db484b..4891c83420 100644 --- a/src/smblib/smballoc.c +++ b/src/smblib/smballoc.c @@ -8,7 +8,7 @@ * @format.tab-size 4 (Plain Text/Source Code File Header) * * @format.use-tabs true (see http://www.synchro.net/ptsc_hdr.html) * * * - * Copyright 2005 Rob Swindell - http://www.synchro.net/copyright.html * + * Copyright Rob Swindell - http://www.synchro.net/copyright.html * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public License * @@ -246,7 +246,7 @@ int SMBCALL smb_incmsg_dfields(smb_t* smb, smbmsg_t* msg, uint16_t refs) { int i=SMB_SUCCESS; BOOL da_opened=FALSE; - ushort x; + uint16_t x; if(smb->status.attr&SMB_HYPERALLOC) /* Nothing to do */ return(SMB_SUCCESS); @@ -300,7 +300,7 @@ int SMBCALL smb_freemsghdr(smb_t* smb, ulong offset, ulong length) int SMBCALL smb_freemsg_dfields(smb_t* smb, smbmsg_t* msg, uint16_t refs) { int i; - ushort x; + uint16_t x; for(x=0;x<msg->hdr.total_dfields;x++) { if((i=smb_freemsgdat(smb,msg->hdr.offset+msg->dfield[x].offset diff --git a/src/smblib/smbdump.c b/src/smblib/smbdump.c index 6b9798a42b..8c10fb1fa4 100644 --- a/src/smblib/smbdump.c +++ b/src/smblib/smbdump.c @@ -8,7 +8,7 @@ * @format.tab-size 4 (Plain Text/Source Code File Header) * * @format.use-tabs true (see http://www.synchro.net/ptsc_hdr.html) * * * - * Copyright 2012 Rob Swindell - http://www.synchro.net/copyright.html * + * Copyright Rob Swindell - http://www.synchro.net/copyright.html * * * * This program is free software; you can redistribute it and/or * * modify it under the terms of the GNU General Public License * @@ -39,7 +39,7 @@ #include <string.h> /* strcat */ #include "smblib.h" -static char *binstr(uchar *buf, ushort length) +static char *binstr(uchar *buf, uint16_t length) { static char str[512]; int i; diff --git a/src/smblib/smbfile.c b/src/smblib/smbfile.c index bdc2e2727e..4c9c0b0ba5 100644 --- a/src/smblib/smbfile.c +++ b/src/smblib/smbfile.c @@ -8,7 +8,7 @@ * @format.tab-size 4 (Plain Text/Source Code File Header) * * @format.use-tabs true (see http://www.synchro.net/ptsc_hdr.html) * * * - * Copyright 2005 Rob Swindell - http://www.synchro.net/copyright.html * + * Copyright Rob Swindell - http://www.synchro.net/copyright.html * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public License * diff --git a/src/smblib/smbhash.c b/src/smblib/smbhash.c index 14572c30b3..dcba6dbe7e 100644 --- a/src/smblib/smbhash.c +++ b/src/smblib/smbhash.c @@ -8,7 +8,7 @@ * @format.tab-size 4 (Plain Text/Source Code File Header) * * @format.use-tabs true (see http://www.synchro.net/ptsc_hdr.html) * * * - * Copyright 2012 Rob Swindell - http://www.synchro.net/copyright.html * + * Copyright Rob Swindell - http://www.synchro.net/copyright.html * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public License * diff --git a/src/smblib/smblib.c b/src/smblib/smblib.c index 814d5bfdb6..5578a65518 100644 --- a/src/smblib/smblib.c +++ b/src/smblib/smblib.c @@ -758,7 +758,7 @@ ulong SMBCALL smb_getmsgtxtlen(smbmsg_t* msg) return(length); } -static void set_convenience_ptr(smbmsg_t* msg, ushort hfield_type, void* hfield_dat) +static void set_convenience_ptr(smbmsg_t* msg, uint16_t hfield_type, void* hfield_dat) { switch(hfield_type) { /* convenience variables */ case AUTHOR: @@ -774,7 +774,7 @@ static void set_convenience_ptr(smbmsg_t* msg, ushort hfield_type, void* hfield_ break; case SENDERAGENT: if(!msg->forwarded) - msg->from_agent=*(ushort *)hfield_dat; + msg->from_agent=*(uint16_t *)hfield_dat; break; case SENDEREXT: if(!msg->forwarded) @@ -786,7 +786,7 @@ static void set_convenience_ptr(smbmsg_t* msg, ushort hfield_type, void* hfield_ break; case SENDERNETTYPE: if(!msg->forwarded) - msg->from_net.type=*(ushort *)hfield_dat; + msg->from_net.type=*(uint16_t *)hfield_dat; break; case SENDERNETADDR: if(!msg->forwarded) @@ -808,10 +808,10 @@ static void set_convenience_ptr(smbmsg_t* msg, ushort hfield_type, void* hfield_ msg->replyto_ext=(char*)hfield_dat; break; case REPLYTOAGENT: - msg->replyto_agent=*(ushort *)hfield_dat; + msg->replyto_agent=*(uint16_t *)hfield_dat; break; case REPLYTONETTYPE: - msg->replyto_net.type=*(ushort *)hfield_dat; + msg->replyto_net.type=*(uint16_t *)hfield_dat; break; case REPLYTONETADDR: msg->replyto_net.addr=(char*)hfield_dat; @@ -823,10 +823,10 @@ static void set_convenience_ptr(smbmsg_t* msg, ushort hfield_type, void* hfield_ msg->to_ext=(char*)hfield_dat; break; case RECIPIENTAGENT: - msg->to_agent=*(ushort *)hfield_dat; + msg->to_agent=*(uint16_t *)hfield_dat; break; case RECIPIENTNETTYPE: - msg->to_net.type=*(ushort *)hfield_dat; + msg->to_net.type=*(uint16_t *)hfield_dat; break; case RECIPIENTNETADDR: msg->to_net.addr=(char*)hfield_dat; @@ -925,7 +925,7 @@ static void clear_convenience_ptrs(smbmsg_t* msg) int SMBCALL smb_getmsghdr(smb_t* smb, smbmsg_t* msg) { void *vp,**vpp; - ushort i; + uint16_t i; ulong l,offset; idxrec_t idx; @@ -1064,7 +1064,7 @@ int SMBCALL smb_getmsghdr(smb_t* smb, smbmsg_t* msg) /****************************************************************************/ void SMBCALL smb_freemsghdrmem(smbmsg_t* msg) { - ushort i; + uint16_t i; for(i=0;i<msg->total_hfields;i++) if(msg->hfield_dat[i]) { @@ -1171,7 +1171,7 @@ int SMBCALL smb_unlockmsghdr(smb_t* smb, smbmsg_t* msg) /****************************************************************************/ /* Adds a header field to the 'msg' structure (in memory only) */ /****************************************************************************/ -int SMBCALL smb_hfield_add(smbmsg_t* msg, ushort type, size_t length, void* data, BOOL insert) +int SMBCALL smb_hfield_add(smbmsg_t* msg, uint16_t type, size_t length, void* data, BOOL insert) { void** vpp; hfield_t* hp; @@ -1232,35 +1232,57 @@ int SMBCALL smb_hfield_add_list(smbmsg_t* msg, hfield_t** hfield_list, void** hf /****************************************************************************/ /* Convenience function to add an ASCIIZ string header field */ /****************************************************************************/ -int SMBCALL smb_hfield_add_str(smbmsg_t* msg, ushort type, const char* str, BOOL insert) +int SMBCALL smb_hfield_add_str(smbmsg_t* msg, uint16_t type, const char* str, BOOL insert) { return smb_hfield_add(msg, type, str==NULL ? 0:strlen(str), (void*)str, insert); } /****************************************************************************/ -/* Convenience function to add an ASCIIZ string header field */ +/* Convenience function to a network address header field to msg */ +/* Pass NULL for net_type to have the auto-detected net_type hfield added */ +/* as well. */ /****************************************************************************/ -int SMBCALL smb_hfield_add_netaddr(smbmsg_t* msg, ushort type, const char* str, ushort* nettype, BOOL insert) +int SMBCALL smb_hfield_add_netaddr(smbmsg_t* msg, uint16_t type, const char* addr, uint16_t* net_type, BOOL insert) { + int result; fidoaddr_t sys_addr = {0,0,0,0}; /* replace unspecified fields with 0 (don't assume 1:1/1) */ fidoaddr_t fidoaddr; - ushort tmp_nettype=NET_UNKNOWN; - - if(nettype==NULL) - nettype=&tmp_nettype; - if(*nettype==NET_UNKNOWN) - *nettype=smb_netaddr_type(str); - if(*nettype==NET_FIDO) { - fidoaddr=smb_atofaddr(&sys_addr,str); - return smb_hfield_add(msg,type,sizeof(fidoaddr),&fidoaddr,insert); - } else - return smb_hfield_add_str(msg,type,str,insert); + uint16_t tmp_net_type=NET_UNKNOWN; + + SKIP_WHITESPACE(addr); + if(net_type==NULL) + net_type=&tmp_net_type; + if(*net_type==NET_UNKNOWN) + *net_type=smb_netaddr_type(addr); + if(*net_type==NET_NONE) + return SMB_ERR_NOT_FOUND; + if(*net_type!=NET_INTERNET) { /* Only Internet net-addresses are allowed to have '@' in them */ + const char* p = strchr(addr, '@'); + if(p != NULL) { + p++; + SKIP_WHITESPACE(p); + if(*p == 0) + return SMB_ERR_NOT_FOUND;; + addr = p; + } + } + if(*net_type==NET_FIDO) { + fidoaddr=smb_atofaddr(&sys_addr,addr); + result = smb_hfield_add(msg,type,sizeof(fidoaddr),&fidoaddr,insert); + } else { + result = smb_hfield_add_str(msg,type,addr,insert); + } + if(result==SMB_SUCCESS && net_type == &tmp_net_type) { + // *NETTYPE is always *NETADDR-1 + result = smb_hfield_add(msg,type-1,sizeof(*net_type),net_type,insert); + } + return result; } /****************************************************************************/ /* Appends data to an existing header field (in memory only) */ /****************************************************************************/ -int SMBCALL smb_hfield_append(smbmsg_t* msg, ushort type, size_t length, void* data) +int SMBCALL smb_hfield_append(smbmsg_t* msg, uint16_t type, size_t length, void* data) { int i; BYTE* p; @@ -1297,7 +1319,7 @@ int SMBCALL smb_hfield_append(smbmsg_t* msg, ushort type, size_t length, void* d /****************************************************************************/ /* Appends data to an existing ASCIIZ header field (in memory only) */ /****************************************************************************/ -int SMBCALL smb_hfield_append_str(smbmsg_t* msg, ushort type, const char* str) +int SMBCALL smb_hfield_append_str(smbmsg_t* msg, uint16_t type, const char* str) { return smb_hfield_append(msg, type, str==NULL ? 0:strlen(str), (void*)str); } @@ -1305,7 +1327,7 @@ int SMBCALL smb_hfield_append_str(smbmsg_t* msg, ushort type, const char* str) /****************************************************************************/ /* Replaces an header field value (in memory only) */ /****************************************************************************/ -int SMBCALL smb_hfield_replace(smbmsg_t* msg, ushort type, size_t length, void* data) +int SMBCALL smb_hfield_replace(smbmsg_t* msg, uint16_t type, size_t length, void* data) { int i; void* p; @@ -1335,7 +1357,7 @@ int SMBCALL smb_hfield_replace(smbmsg_t* msg, ushort type, size_t length, void* /****************************************************************************/ /* Replace an existing ASCIIZ header field value (in memory only) */ /****************************************************************************/ -int SMBCALL smb_hfield_replace_str(smbmsg_t* msg, ushort type, const char* str) +int SMBCALL smb_hfield_replace_str(smbmsg_t* msg, uint16_t type, const char* str) { return smb_hfield_replace(msg, type, str==NULL ? 0:strlen(str), (void*)str); } @@ -1343,7 +1365,7 @@ int SMBCALL smb_hfield_replace_str(smbmsg_t* msg, ushort type, const char* str) /****************************************************************************/ /* Searches for a specific header field (by type) and returns it */ /****************************************************************************/ -void* SMBCALL smb_get_hfield(smbmsg_t* msg, ushort type, hfield_t* hfield) +void* SMBCALL smb_get_hfield(smbmsg_t* msg, uint16_t type, hfield_t* hfield) { int i; @@ -1362,7 +1384,7 @@ void* SMBCALL smb_get_hfield(smbmsg_t* msg, ushort type, hfield_t* hfield) /* Automatically figures out the offset into the data buffer from existing */ /* dfield lengths */ /****************************************************************************/ -int SMBCALL smb_dfield(smbmsg_t* msg, ushort type, ulong length) +int SMBCALL smb_dfield(smbmsg_t* msg, uint16_t type, ulong length) { dfield_t* dp; int i,j; @@ -1531,7 +1553,7 @@ int SMBCALL smb_addmsghdr(smb_t* smb, smbmsg_t* msg, int storage) if(msg->hdr.version==0) msg->hdr.version=SMB_VERSION; - msg->hdr.length=(ushort)hdrlen; + msg->hdr.length=(uint16_t)hdrlen; if(storage==SMB_HYPERALLOC) l=smb_hallochdr(smb); else if(storage==SMB_FASTALLOC) @@ -1673,7 +1695,7 @@ int SMBCALL smb_putmsgidx(smb_t* smb, smbmsg_t* msg) /****************************************************************************/ int SMBCALL smb_putmsghdr(smb_t* smb, smbmsg_t* msg) { - ushort i; + uint16_t i; ulong hdrlen; if(smb->shd_fp==NULL) { @@ -1707,7 +1729,7 @@ int SMBCALL smb_putmsghdr(smb_t* smb, smbmsg_t* msg) ,msg->hdr.length, smb_hdrblocks(msg->hdr.length)); return(SMB_ERR_HDR_LEN); } - msg->hdr.length=(ushort)hdrlen; /* store the actual header length */ + msg->hdr.length=(uint16_t)hdrlen; /* store the actual header length */ /**********************************/ /* Set the message header ID here */ /**********************************/ @@ -1839,7 +1861,7 @@ ulong SMBCALL smb_hdrblocks(ulong length) /****************************************************************************/ /* Returns difference from specified timezone and UTC/GMT (in minutes) */ /****************************************************************************/ -int SMBCALL smb_tzutc(short zone) +int SMBCALL smb_tzutc(int16_t zone) { int tz; diff --git a/src/smblib/smblib.h b/src/smblib/smblib.h index e2f0bbe9cc..20942268a5 100644 --- a/src/smblib/smblib.h +++ b/src/smblib/smblib.h @@ -125,14 +125,14 @@ SMBEXPORT int SMBCALL smb_getmsghdr(smb_t* smb, smbmsg_t* msg); SMBEXPORT int SMBCALL smb_unlockmsghdr(smb_t* smb, smbmsg_t* msg); SMBEXPORT int SMBCALL smb_addcrc(smb_t* smb, uint32_t crc); -SMBEXPORT int SMBCALL smb_hfield_add(smbmsg_t* msg, ushort type, size_t length, void* data, BOOL insert); -SMBEXPORT int SMBCALL smb_hfield_add_str(smbmsg_t* msg, ushort type, const char* str, BOOL insert); -SMBEXPORT int SMBCALL smb_hfield_replace(smbmsg_t* msg, ushort type, size_t length, void* data); -SMBEXPORT int SMBCALL smb_hfield_replace_str(smbmsg_t* msg, ushort type, const char* str); -SMBEXPORT int SMBCALL smb_hfield_append(smbmsg_t* msg, ushort type, size_t length, void* data); -SMBEXPORT int SMBCALL smb_hfield_append_str(smbmsg_t* msg, ushort type, const char* data); +SMBEXPORT int SMBCALL smb_hfield_add(smbmsg_t* msg, uint16_t type, size_t length, void* data, BOOL insert); +SMBEXPORT int SMBCALL smb_hfield_add_str(smbmsg_t* msg, uint16_t type, const char* str, BOOL insert); +SMBEXPORT int SMBCALL smb_hfield_replace(smbmsg_t* msg, uint16_t type, size_t length, void* data); +SMBEXPORT int SMBCALL smb_hfield_replace_str(smbmsg_t* msg, uint16_t type, const char* str); +SMBEXPORT int SMBCALL smb_hfield_append(smbmsg_t* msg, uint16_t type, size_t length, void* data); +SMBEXPORT int SMBCALL smb_hfield_append_str(smbmsg_t* msg, uint16_t type, const char* data); SMBEXPORT int SMBCALL smb_hfield_add_list(smbmsg_t* msg, hfield_t** hfield_list, void** hfield_dat, BOOL insert); -SMBEXPORT int SMBCALL smb_hfield_add_netaddr(smbmsg_t* msg, ushort type, const char* str, ushort* nettype, BOOL insert); +SMBEXPORT int SMBCALL smb_hfield_add_netaddr(smbmsg_t* msg, uint16_t type, const char* str, uint16_t* nettype, BOOL insert); /* Convenience macro: */ #define smb_hfield_bin(msg, type, data) smb_hfield_add(msg, type, sizeof(data), &(data), /* insert: */FALSE) /* Backward compatibility macros: */ @@ -140,8 +140,8 @@ SMBEXPORT int SMBCALL smb_hfield_add_netaddr(smbmsg_t* msg, ushort type, const #define smb_hfield_str(msg, type, str) smb_hfield_add_str(msg, type, str, /* insert: */FALSE) #define smb_hfield_netaddr(msg, type, str, nettype) smb_hfield_add_netaddr(msg, type, str, nettype, /* insert: */FALSE) -SMBEXPORT int SMBCALL smb_dfield(smbmsg_t* msg, ushort type, ulong length); -SMBEXPORT void* SMBCALL smb_get_hfield(smbmsg_t* msg, ushort type, hfield_t* hfield); +SMBEXPORT int SMBCALL smb_dfield(smbmsg_t* msg, uint16_t type, ulong length); +SMBEXPORT void* SMBCALL smb_get_hfield(smbmsg_t* msg, uint16_t type, hfield_t* hfield); SMBEXPORT int SMBCALL smb_addmsghdr(smb_t* smb, smbmsg_t* msg, int storage); SMBEXPORT int SMBCALL smb_putmsg(smb_t* smb, smbmsg_t* msg); SMBEXPORT int SMBCALL smb_putmsgidx(smb_t* smb, smbmsg_t* msg); @@ -151,7 +151,7 @@ SMBEXPORT void SMBCALL smb_freemsghdrmem(smbmsg_t* msg); SMBEXPORT ulong SMBCALL smb_hdrblocks(ulong length); SMBEXPORT ulong SMBCALL smb_datblocks(ulong length); SMBEXPORT int SMBCALL smb_copymsgmem(smb_t* smb, smbmsg_t* destmsg, smbmsg_t* srcmsg); -SMBEXPORT int SMBCALL smb_tzutc(short timezone); +SMBEXPORT int SMBCALL smb_tzutc(int16_t timezone); SMBEXPORT int SMBCALL smb_updatethread(smb_t* smb, smbmsg_t* remsg, ulong newmsgnum); SMBEXPORT int SMBCALL smb_updatemsg(smb_t* smb, smbmsg_t* msg); SMBEXPORT BOOL SMBCALL smb_valid_hdr_offset(smb_t* smb, ulong offset); @@ -215,18 +215,19 @@ SMBEXPORT int SMBCALL smb_getmsghdr_by_hash(smb_t* smb, smbmsg_t* msg, unsigne smb_getmsghdr_by_hashstr(smb, msg, SMB_HASH_SOURCE_FTN_ID, SMB_HASH_MASK, id) /* smbstr.c */ -SMBEXPORT char* SMBCALL smb_hfieldtype(ushort type); -SMBEXPORT ushort SMBCALL smb_hfieldtypelookup(const char*); -SMBEXPORT char* SMBCALL smb_dfieldtype(ushort type); +SMBEXPORT char* SMBCALL smb_hfieldtype(uint16_t type); +SMBEXPORT uint16_t SMBCALL smb_hfieldtypelookup(const char*); +SMBEXPORT char* SMBCALL smb_dfieldtype(uint16_t type); SMBEXPORT char* SMBCALL smb_faddrtoa(fidoaddr_t* addr, char* outstr); SMBEXPORT char* SMBCALL smb_netaddr(net_t* net); SMBEXPORT char* SMBCALL smb_netaddrstr(net_t* net, char* fidoaddr_buf); -SMBEXPORT ushort SMBCALL smb_netaddr_type(const char* str); -SMBEXPORT char* SMBCALL smb_zonestr(short zone, char* outstr); +SMBEXPORT char* SMBCALL smb_nettype(enum smb_net_type); +SMBEXPORT char* SMBCALL smb_zonestr(int16_t zone, char* outstr); SMBEXPORT char* SMBCALL smb_hashsource(smbmsg_t* msg, int source); SMBEXPORT char* SMBCALL smb_hashsourcetype(uchar type); SMBEXPORT fidoaddr_t SMBCALL smb_atofaddr(const fidoaddr_t* sys_addr, const char *str); - +SMBEXPORT enum smb_net_type SMBCALL smb_netaddr_type(const char* addr); +SMBEXPORT enum smb_net_type SMBCALL smb_get_net_type_by_addr(const char* addr); /* smbdump.c */ SMBEXPORT void SMBCALL smb_dump_msghdr(FILE* fp, smbmsg_t* msg); diff --git a/src/smblib/smbstr.c b/src/smblib/smbstr.c index 01c807c221..204d363a1a 100644 --- a/src/smblib/smbstr.c +++ b/src/smblib/smbstr.c @@ -8,7 +8,7 @@ * @format.tab-size 4 (Plain Text/Source Code File Header) * * @format.use-tabs true (see http://www.synchro.net/ptsc_hdr.html) * * * - * Copyright 2011 Rob Swindell - http://www.synchro.net/copyright.html * + * Copyright Rob Swindell - http://www.synchro.net/copyright.html * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public License * @@ -40,7 +40,7 @@ #include <genwrap.h> /* stricmp */ #include "smblib.h" -char* SMBCALL smb_hfieldtype(ushort type) +char* SMBCALL smb_hfieldtype(uint16_t type) { static char str[8]; @@ -119,12 +119,12 @@ char* SMBCALL smb_hfieldtype(ushort type) return(str); } -ushort SMBCALL smb_hfieldtypelookup(const char* str) +uint16_t SMBCALL smb_hfieldtypelookup(const char* str) { - ushort type; + uint16_t type; if(isdigit(*str)) - return((ushort)strtol(str,NULL,0)); + return((uint16_t)strtol(str,NULL,0)); for(type=0;type<=UNUSED;type++) if(stricmp(str,smb_hfieldtype(type))==0) @@ -133,7 +133,7 @@ ushort SMBCALL smb_hfieldtypelookup(const char* str) return(UNKNOWN); } -char* SMBCALL smb_dfieldtype(ushort type) +char* SMBCALL smb_dfieldtype(uint16_t type) { static char str[8]; @@ -176,14 +176,14 @@ char* SMBCALL smb_hashsource(smbmsg_t* msg, int source) /****************************************************************************/ /* Converts when_t.zone into ASCII format */ /****************************************************************************/ -char* SMBCALL smb_zonestr(short zone, char* str) +char* SMBCALL smb_zonestr(int16_t zone, char* str) { char* plus; static char buf[32]; if(str==NULL) str=buf; - switch((ushort)zone) { + switch((uint16_t)zone) { case 0: return("UTC"); case AST: return("AST"); case EST: return("EST"); @@ -320,12 +320,9 @@ char* SMBCALL smb_netaddrstr(net_t* net, char* fidoaddr_buf) /****************************************************************************/ /* Returns net_type for passed e-mail address (i.e. "user@addr") */ /****************************************************************************/ -ushort SMBCALL smb_netaddr_type(const char* str) +enum smb_net_type SMBCALL smb_netaddr_type(const char* str) { char* p; - char* tp; - char* firstdot; - char* lastdot; if((p=strchr(str,'@'))==NULL) return(NET_NONE); @@ -335,6 +332,32 @@ ushort SMBCALL smb_netaddr_type(const char* str) if(*p==0) return(NET_UNKNOWN); + return smb_get_net_type_by_addr(p); +} + +/****************************************************************************/ +/* Returns net_type for passed network address */ +/* The only addresses expected with an '@' are Internet/SMTP addresses */ +/* Examples: */ +/* "VERT" = NET_QWK */ +/* "1:103/705" = NET_FIDO */ +/* "705.0" = NET_FIDO */ +/* "705" = NET_FIDO */ +/* "192.168.1.0" = NET_INTERNET */ +/* "some.host" = NET_INTERNET */ +/* "someone@anywhere" = NET_INTERNET */ +/* "someone@some.host" = NET_INTERNET */ +/****************************************************************************/ +enum smb_net_type SMBCALL smb_get_net_type_by_addr(const char* addr) +{ + const char* p = addr; + const char* tp; + char* firstdot; + char* lastdot; + + if(strchr(p,'@') != NULL) + return(NET_INTERNET); + firstdot=strchr(p,'.'); lastdot=strrchr(p,'.'); @@ -352,3 +375,15 @@ ushort SMBCALL smb_netaddr_type(const char* str) return(NET_UNKNOWN); } + +char* SMBCALL smb_nettype(enum smb_net_type type) +{ + switch(type) { + case NET_NONE: return "NONE"; + case NET_UNKNOWN: return "UNKNOWN"; + case NET_QWK: return "QWKnet"; + case NET_FIDO: return "Fidonet"; + case NET_INTERNET: return "Internet"; + } + return "Unsupported net type"; +} -- GitLab