/** * Child resolved name * * @v mux Name resolution multiplexer * @v sa Completed socket address */ static void resmux_child_resolv_done ( struct resolv_mux *mux, struct sockaddr *sa ) { DBGC ( mux, "RESOLV %p resolved \"%s\" to %s using method %s\n", mux, mux->name, sock_ntoa ( sa ), mux->resolver->name ); /* Pass resolution to parent */ resolv_done ( &mux->parent, sa ); }
MODULE signal_connection_failed (THREAD *thread) { tcb = thread-> tcb; /* Point to thread's context */ sendfmt (&operq, "ERROR", "smtftpd: could not connect to %s:%d", sock_ntoa (htonl (tcb-> data_host)), tcb-> data_port); SEND (&tcb-> reply_to, "FTPD_ERROR", ""); }
/** * Display ping result * * @v src Source socket address, or NULL * @v sequence Sequence number * @v len Payload length * @v rc Status code */ static void ping_callback ( struct sockaddr *peer, unsigned int sequence, size_t len, int rc ) { /* Display ping response */ printf ( "%zd bytes from %s: seq=%d", len, ( peer ? sock_ntoa ( peer ) : "<none>" ), sequence ); if ( rc != 0 ) printf ( ": %s", strerror ( rc ) ); printf ( "\n" ); }
/** * Construct TFTP URI from server address and filename * * @v sa_server Server address * @v filename Filename * @ret uri URI, or NULL on failure */ static struct uri * tftp_uri ( struct sockaddr *sa_server, const char *filename ) { struct sockaddr_tcpip *st_server = ( ( struct sockaddr_tcpip * ) sa_server ); char buf[ 6 /* "65535" + NUL */ ]; char *path; struct uri tmp; struct uri *uri = NULL; /* Initialise TFTP URI */ memset ( &tmp, 0, sizeof ( tmp ) ); tmp.scheme = "tftp"; /* Construct TFTP server address */ tmp.host = sock_ntoa ( sa_server ); if ( ! tmp.host ) goto err_host; /* Construct TFTP server port, if applicable */ if ( st_server->st_port ) { snprintf ( buf, sizeof ( buf ), "%d", ntohs ( st_server->st_port ) ); tmp.port = buf; } /* Construct TFTP path */ if ( asprintf ( &path, "/%s", filename ) < 0 ) goto err_path; tmp.path = path; /* Demangle URI */ uri = uri_dup ( &tmp ); if ( ! uri ) goto err_uri; err_uri: free ( path ); err_path: err_host: return uri; }