* Mnemonic: SIaddress
* Abstract: This routine will convert a sockaddr_in structure to a
* dotted decimal address, or visa versa.
* Mnemonic: SIaddress
* Abstract: This routine will convert a sockaddr_in structure to a
* dotted decimal address, or visa versa.
* xxx.xxx.xxx.xxx.portnumber or host-name.portnumber
* xxx.xxx.xxx.xxx.service[.protocol] or hostname;service[;protocol]
* if protocol is not supplied then tcp is assumed.
* hostname may be something like godzilla.moviemania.com
* Parms: src - Pointer to source buffer
* xxx.xxx.xxx.xxx.portnumber or host-name.portnumber
* xxx.xxx.xxx.xxx.service[.protocol] or hostname;service[;protocol]
* if protocol is not supplied then tcp is assumed.
* hostname may be something like godzilla.moviemania.com
* Parms: src - Pointer to source buffer
-* dest- Pointer to dest buffer pointer
-* type- Type of conversion AC_TODOT converts sockaddr to human readable. AC_TOADDR
+* dest- Pointer to dest buffer pointer
+* type- Type of conversion AC_TODOT converts sockaddr to human readable. AC_TOADDR
* Modified: 22 Mar 1995 - To add support for ipx addresses.
* 18 Oct 2020 - drop old port separator (;)
*
* Modified: 22 Mar 1995 - To add support for ipx addresses.
* 18 Oct 2020 - drop old port separator (;)
*
-* CAUTION: The netdb.h header file is a bit off when it sets up the
-* hostent structure. It claims that h_addr_list is a pointer
-* to character pointers, but it is really a pointer to a list
+* CAUTION: The netdb.h header file is a bit off when it sets up the
+* hostent structure. It claims that h_addr_list is a pointer
+* to character pointers, but it is really a pointer to a list
proto: IPPROTO_TCP IPPROTO_UDP
type: SOCK_STREAM SOCK_DGRAM
returns length of struct pointed to by rap (return addr blockpointer)
*/
extern int SIgenaddr( char *target, int proto, int family, int socktype, struct sockaddr **rap ) {
proto: IPPROTO_TCP IPPROTO_UDP
type: SOCK_STREAM SOCK_DGRAM
returns length of struct pointed to by rap (return addr blockpointer)
*/
extern int SIgenaddr( char *target, int proto, int family, int socktype, struct sockaddr **rap ) {
- struct addrinfo hint; // hints to give getaddrinfo
- struct addrinfo *list = NULL; // list of what comes back
- int ga_flags = 0; // flags to pass to getaddrinfo in hints
+ struct addrinfo hint; // hints to give getaddrinfo
+ struct addrinfo *list = NULL; // list of what comes back
+ int ga_flags = 0; // flags to pass to getaddrinfo in hints
- int rlen = 0; // length of the addr that rap points to on return
- char *pstr; // port string
- char *dstr; // a copy of the users target that we can destroy
+ int rlen = 0; // length of the addr that rap points to on return
+ char *pstr; // port string
+ char *dstr; // a copy of the users target that we can destroy
- fptr = dstr = strdup( (char *) target ); // copy so we can destroy it with strtok
- *rap = NULL; // ensure null incase something breaks
+ fptr = dstr = strdup( (char *) target ); // copy so we can destroy it with strtok
+ *rap = NULL; // ensure null incase something breaks
- hint.ai_family = family; // AF_INET AF_INET6... let this be 0 to select best based on addr
- hint.ai_socktype = socktype; // SOCK_DGRAM SOCK_STREAM
- hint.ai_protocol = proto; // IPPROTO_TCP IPPROTO_UDP
+ hint.ai_family = family; // AF_INET AF_INET6... let this be 0 to select best based on addr
+ hint.ai_socktype = socktype; // SOCK_DGRAM SOCK_STREAM
+ hint.ai_protocol = proto; // IPPROTO_TCP IPPROTO_UDP
rmr_vlog( RMR_VL_DEBUG, "siaddress: calling getaddrinfo flags=%x sockty=%d proto=%d family=%d target=%s host=%s port=%s\n",
ga_flags, socktype, proto, family, target, dstr, pstr );
if( (error = getaddrinfo( dstr, pstr, &hint, &list )) ) {
rmr_vlog( RMR_VL_DEBUG, "siaddress: calling getaddrinfo flags=%x sockty=%d proto=%d family=%d target=%s host=%s port=%s\n",
ga_flags, socktype, proto, family, target, dstr, pstr );
if( (error = getaddrinfo( dstr, pstr, &hint, &list )) ) {
- fprintf( stderr, "sigenaddr: error from getaddrinfo: target=%s host=%s port=%s(port): error=(%d) %s\n",
+ fprintf( stderr, "sigenaddr: error from getaddrinfo: target=%s host=%s port=%s(port): error=(%d) %s\n",
target, dstr, pstr, error, gai_strerror( error ) );
} else {
target, dstr, pstr, error, gai_strerror( error ) );
} else {
Given a source address convert from one form to another based on type constant.
Type const == AC_TODOT Convert source address structure to human readable string.
Type const == AC_TOADDR6 Convert source string (host:port or ipv6 address [n:n...:n]:port) to an address struct
Type const == AC_TOADDR Convert source string (host:port or ipv4 dotted decimal address) to an address struct
*/
extern int SIaddress( void *src, void **dest, int type ) {
Given a source address convert from one form to another based on type constant.
Type const == AC_TODOT Convert source address structure to human readable string.
Type const == AC_TOADDR6 Convert source string (host:port or ipv6 address [n:n...:n]:port) to an address struct
Type const == AC_TOADDR Convert source string (host:port or ipv4 dotted decimal address) to an address struct
*/
extern int SIaddress( void *src, void **dest, int type ) {
if( addr->sin_family == AF_INET6 ) {
addr6 = (struct sockaddr_in6 *) src; // really an ip6 struct
byte = (uint8_t *) &addr6->sin6_addr;
if( addr->sin_family == AF_INET6 ) {
addr6 = (struct sockaddr_in6 *) src; // really an ip6 struct
byte = (uint8_t *) &addr6->sin6_addr;
- sprintf( wbuf, "[%u:%u:%u:%u:%u:%u]:%d",
- *(byte+0), *(byte+1), *(byte+2),
- *(byte+3), *(byte+4), *(byte+5) ,
+ snprintf( wbuf, sizeof( wbuf ), "[%u:%u:%u:%u:%u:%u]:%d",
+ *(byte+0), *(byte+1), *(byte+2),
+ *(byte+3), *(byte+4), *(byte+5) ,
- num = (char *) &addr->sin_addr.s_addr; // point at the long
- sprintf( wbuf, "%u.%u.%u.%u;%d", *(num+0), *(num+1), *(num+2), *(num+3), (int) ntohs(addr->sin_port) );
+ num = (char *) &addr->sin_addr.s_addr; // point at the long
+ snprintf( wbuf, sizeof( wbuf ), "%u.%u.%u.%u:%d", *(num+0), *(num+1), *(num+2), *(num+3), (int) ntohs(addr->sin_port) );
return SIgenaddr( src, IPPROTO_TCP, AF_INET6, SOCK_STREAM, (struct sockaddr **) dest );
return SIgenaddr( src, IPPROTO_TCP, AF_INET6, SOCK_STREAM, (struct sockaddr **) dest );
- case AC_TOADDR: // from dotted decimal to address struct ip4
- //return SIgenaddr( src, AF_INET, IPPROTO_TCP, SOCK_STREAM, (struct sockaddr **) dest );
+ case AC_TOADDR: // from dotted decimal to address struct ip4
return SIgenaddr( src, IPPROTO_TCP, AF_INET, SOCK_STREAM, (struct sockaddr **) dest );
}
return SIgenaddr( src, IPPROTO_TCP, AF_INET, SOCK_STREAM, (struct sockaddr **) dest );
}