Eliminate PF_INET; just use the AF_INET from the struct sockaddr instead.

This commit is contained in:
Michael Brown
2007-05-26 20:41:23 +00:00
parent 070c55a838
commit a1210e4fca
3 changed files with 43 additions and 50 deletions

View File

@@ -75,30 +75,29 @@ int xfer_open_uri ( struct xfer_interface *xfer, const char *uri_string ) {
* Open socket * Open socket
* *
* @v xfer Data transfer interface * @v xfer Data transfer interface
* @v domain Communication domain (e.g. PF_INET) * @v semantics Communication semantics (e.g. SOCK_STREAM)
* @v type Communication semantics (e.g. SOCK_STREAM)
* @v peer Peer socket address * @v peer Peer socket address
* @v local Local socket address, or NULL * @v local Local socket address, or NULL
* @ret rc Return status code * @ret rc Return status code
*/ */
int xfer_open_socket ( struct xfer_interface *xfer, int xfer_open_socket ( struct xfer_interface *xfer, int semantics,
int domain, int type, struct sockaddr *peer, struct sockaddr *peer, struct sockaddr *local ) {
struct sockaddr *local ) {
struct socket_opener *opener; struct socket_opener *opener;
DBGC ( xfer, "XFER %p opening (%s,%s) socket\n", xfer, DBGC ( xfer, "XFER %p opening (%s,%s) socket\n", xfer,
socket_domain_name ( domain ), socket_type_name ( type ) ); socket_semantics_name ( semantics ),
socket_family_name ( peer->sa_family ) );
for ( opener = socket_openers; opener < socket_openers_end; opener++ ){ for ( opener = socket_openers; opener < socket_openers_end; opener++ ){
if ( ( opener->domain == domain ) && if ( ( opener->semantics == semantics ) &&
( opener->type == type ) ) { ( opener->family == peer->sa_family ) ) {
return opener->open ( xfer, peer, local ); return opener->open ( xfer, peer, local );
} }
} }
DBGC ( xfer, "XFER %p attempted to open unsupported socket type " DBGC ( xfer, "XFER %p attempted to open unsupported socket type "
"(%s,%s)\n", xfer, socket_domain_name ( domain ), "(%s,%s)\n", xfer, socket_semantics_name ( semantics ),
socket_type_name ( type ) ); socket_family_name ( peer->sa_family ) );
return -ENOTSUP; return -ENOTSUP;
} }
@@ -117,12 +116,11 @@ int xfer_vopen ( struct xfer_interface *xfer, int type, va_list args ) {
return xfer_open_uri ( xfer, uri_string ); } return xfer_open_uri ( xfer, uri_string ); }
case LOCATION_SOCKET: { case LOCATION_SOCKET: {
int domain = va_arg ( args, int ); int semantics = va_arg ( args, int );
int type = va_arg ( args, int );
struct sockaddr *peer = va_arg ( args, struct sockaddr * ); struct sockaddr *peer = va_arg ( args, struct sockaddr * );
struct sockaddr *local = va_arg ( args, struct sockaddr * ); struct sockaddr *local = va_arg ( args, struct sockaddr * );
return xfer_open_socket ( xfer, domain, type, peer, local ); } return xfer_open_socket ( xfer, semantics, peer, local ); }
default: default:
DBGC ( xfer, "XFER %p attempted to open unsupported location " DBGC ( xfer, "XFER %p attempted to open unsupported location "
"type %d\n", xfer, type ); "type %d\n", xfer, type );

View File

@@ -26,7 +26,9 @@ enum {
* *
* Parameter list for open() is: * Parameter list for open() is:
* *
* * int semantics;
* struct sockaddr *peer;
* struct sockaddr *local;
*/ */
LOCATION_SOCKET, LOCATION_SOCKET,
}; };
@@ -56,10 +58,10 @@ struct uri_opener {
/** A socket opener */ /** A socket opener */
struct socket_opener { struct socket_opener {
/** Communication domain (e.g. PF_INET) */
int domain;
/** Communication semantics (e.g. SOCK_STREAM) */ /** Communication semantics (e.g. SOCK_STREAM) */
int type; int semantics;
/** Address family (e.g. AF_INET) */
int family;
/** Open socket /** Open socket
* *
* @v xfer Data transfer interface * @v xfer Data transfer interface
@@ -76,9 +78,11 @@ struct socket_opener {
extern int xfer_open_uri ( struct xfer_interface *xfer, extern int xfer_open_uri ( struct xfer_interface *xfer,
const char *uri_string ); const char *uri_string );
extern int xfer_open_socket ( struct xfer_interface *xfer, extern int xfer_open_named_socket ( struct xfer_interface *xfer,
int domain, int type, struct sockaddr *peer, int semantics, struct sockaddr *peer,
struct sockaddr *local ); const char *name, struct sockaddr *local );
extern int xfer_open_socket ( struct xfer_interface *xfer, int semantics,
struct sockaddr *peer, struct sockaddr *local );
extern int xfer_vopen ( struct xfer_interface *xfer, int type, va_list args ); extern int xfer_vopen ( struct xfer_interface *xfer, int type, va_list args );
extern int xfer_open ( struct xfer_interface *xfer, int type, ... ); extern int xfer_open ( struct xfer_interface *xfer, int type, ... );

View File

@@ -8,31 +8,7 @@
*/ */
/** /**
* @defgroup commdomains Communication domains * @defgroup commtypes Communication semantics
*
* @{
*/
#define PF_INET 1 /**< IPv4 Internet protocols */
#define PF_INET6 2 /**< IPv6 Internet protocols */
/** @} */
/**
* Name communication domain
*
* @v domain Communication domain (e.g. PF_INET)
* @ret name Name of communication domain
*/
static inline __attribute__ (( always_inline )) const char *
socket_domain_name ( int domain ) {
switch ( domain ) {
case PF_INET: return "PF_INET";
case PF_INET6: return "PF_INET6";
default: return "PF_UNKNOWN";
}
}
/**
* @defgroup commtypes Communication types
* *
* @{ * @{
*/ */
@@ -41,14 +17,14 @@ socket_domain_name ( int domain ) {
/** @} */ /** @} */
/** /**
* Name communication type * Name communication semantics
* *
* @v type Communication type (e.g. SOCK_STREAM) * @v semantics Communication semantics (e.g. SOCK_STREAM)
* @ret name Name of communication type * @ret name Name of communication semantics
*/ */
static inline __attribute__ (( always_inline )) const char * static inline __attribute__ (( always_inline )) const char *
socket_type_name ( int type ) { socket_semantics_name ( int semantics ) {
switch ( type ) { switch ( semantics ) {
case SOCK_STREAM: return "SOCK_STREAM"; case SOCK_STREAM: return "SOCK_STREAM";
case SOCK_DGRAM: return "SOCK_DGRAM"; case SOCK_DGRAM: return "SOCK_DGRAM";
default: return "SOCK_UNKNOWN"; default: return "SOCK_UNKNOWN";
@@ -64,6 +40,21 @@ socket_type_name ( int type ) {
#define AF_INET6 2 /**< IPv6 Internet addresses */ #define AF_INET6 2 /**< IPv6 Internet addresses */
/** @} */ /** @} */
/**
* Name address family
*
* @v family Address family (e.g. AF_INET)
* @ret name Name of address family
*/
static inline __attribute__ (( always_inline )) const char *
socket_family_name ( int family ) {
switch ( family ) {
case AF_INET: return "AF_INET";
case AF_INET6: return "AF_INET6";
default: return "AF_UNKNOWN";
}
}
/** A socket address family */ /** A socket address family */
typedef uint16_t sa_family_t; typedef uint16_t sa_family_t;