Skip to content
Snippets Groups Projects
Commit d4450328 authored by rswindell's avatar rswindell
Browse files

Created functions: smb_atofaddr() and smb_hfield_netaddr().

Created convenience macro: smb_hfield_bin().
parent 50364101
No related branches found
No related tags found
No related merge requests found
......@@ -1152,6 +1152,26 @@ int SMBCALL smb_hfield_str(smbmsg_t* msg, ushort type, const char* str)
return smb_hfield(msg, type, strlen(str), (void*)str);
}
/****************************************************************************/
/* Convenience function to add an ASCIIZ string header field */
/****************************************************************************/
int SMBCALL smb_hfield_netaddr(smbmsg_t* msg, ushort type, const char* str, ushort* nettype)
{
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_bin(msg,type,fidoaddr);
} else
return smb_hfield_str(msg,type,str);
}
/****************************************************************************/
/* Appends data to an existing header field (in memory only) */
/****************************************************************************/
......
......@@ -125,11 +125,15 @@ SMBEXPORT int SMBCALL smb_lockmsghdr(smb_t* smb, smbmsg_t* msg);
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, ulong crc);
SMBEXPORT int SMBCALL smb_hfield(smbmsg_t* msg, ushort type, size_t length, void* data);
SMBEXPORT int SMBCALL smb_hfield_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_addlist(smbmsg_t* msg, hfield_t** hfield_list, void** hfield_dat);
SMBEXPORT int SMBCALL smb_hfield_netaddr(smbmsg_t* msg, ushort type, const char* str, ushort* nettype);
#define smb_hfield_bin(msg, type, data) smb_hfield(msg, type, sizeof(data), &(data))
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_addmsghdr(smb_t* smb, smbmsg_t* msg, int storage);
......@@ -209,6 +213,7 @@ SMBEXPORT ushort SMBCALL smb_netaddr_type(const char* str);
SMBEXPORT char* SMBCALL smb_zonestr(short 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);
/* smbdump.c */
SMBEXPORT void SMBCALL smb_dump_msghdr(FILE* fp, smbmsg_t* msg);
......
......@@ -252,6 +252,40 @@ char* SMBCALL smb_faddrtoa(fidoaddr_t* addr, char* outstr)
return(outstr);
}
/****************************************************************************/
/* Returns the FidoNet address parsed from str. */
/****************************************************************************/
fidoaddr_t SMBCALL smb_atofaddr(const fidoaddr_t* sys_addr, const char *str)
{
char *p;
fidoaddr_t addr;
fidoaddr_t tmp_addr={1,1,1,0}; /* Default system address: 1:1/1.0 */
if(sys_addr==NULL)
sys_addr=&tmp_addr;
ZERO_VAR(addr);
if((p=strchr(str,':'))!=NULL) {
addr.zone=atoi(str);
addr.net=atoi(p+1);
} else {
addr.zone=sys_addr->zone;
addr.net=atoi(str);
}
if(addr.zone==0) /* no such thing as zone 0 */
addr.zone=1;
if((p=strchr(str,'/'))!=NULL)
addr.node=atoi(p+1);
else {
if(addr.zone==sys_addr->zone)
addr.net=sys_addr->net;
addr.node=atoi(str);
}
if((p=strchr(str,'.'))!=NULL)
addr.point=atoi(p+1);
return(addr);
}
/****************************************************************************/
/* Returns ASCIIZ representation of network address (net_t) */
/****************************************************************************/
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment