/* * newServerHandler * * Expecting a string containing the URI for the client */ static enum ccn_upcall_res newServerHandler(struct ccn_closure *selfp, enum ccn_upcall_kind kind, struct ccn_upcall_info *info) { dropbear_log(LOG_WARNING,"Enter newServerHandler"); dropbear_log(LOG_WARNING,"Got interest matching %d components, kind = %d\n", info->matched_comps, kind); int result; const unsigned char *ccnb = NULL; size_t ccnb_size; void *data = NULL; size_t data_size = 0; switch (kind) { case CCN_UPCALL_CONTENT: break; case CCN_UPCALL_INTEREST_TIMED_OUT: return CCN_UPCALL_RESULT_REEXPRESS; case CCN_UPCALL_CONTENT_UNVERIFIED: // TODO: fix verification break; default: return CCN_UPCALL_RESULT_ERR; } dropbear_log(LOG_WARNING,"Interest to"); print_ccnb_name(info); ccnb = info->content_ccnb; ccnb_size = info->pco->offset[CCN_PCO_E]; result = ccn_content_get_value(ccnb, ccnb_size, info->pco, (const unsigned char **)&data, &data_size); if( result < 0 ) dropbear_exit("Could not parse reply message"); dropbear_log(LOG_WARNING,"newServerHandler: parsing contents"); if( strncmp((char *)data,"ccnx:/",6) == 0 ) { cli_opts.remote_name_str = (char *)data; dropbear_log(LOG_WARNING,"newServerHandler: matches: %s (%d)",data,data_size); ses.remote_name = ccn_charbuf_create(); result = ccn_name_from_uri(ses.remote_name,cli_opts.remote_name_str); if( result < 0 ) dropbear_exit("Did not find expected uri in server response"); // Start a new session dropbear_log(LOG_WARNING,"Connected to server at"); print_ccnb_charbuf(ses.remote_name); cli_session(cli_opts.ccnxdomain,cli_opts.remote_name_str); return CCN_UPCALL_RESULT_OK; } else { dropbear_log(LOG_WARNING,"newServerHandler: doesn't match"); return CCN_UPCALL_RESULT_ERR; } }
int cli_main(int argc, char ** argv) { #else int main(int argc, char ** argv) { #endif int sock_in, sock_out; struct dropbear_progress_connection *progress = NULL; _dropbear_exit = cli_dropbear_exit; _dropbear_log = cli_dropbear_log; disallow_core(); seedrandom(); crypto_init(); cli_getopts(argc, argv); #ifndef DISABLE_SYSLOG if (opts.usingsyslog) { startsyslog("dbclient"); } #endif TRACE(("user='******' host='%s' port='%s' bind_address='%s' bind_port='%s'", cli_opts.username, cli_opts.remotehost, cli_opts.remoteport, cli_opts.bind_address, cli_opts.bind_port)) if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) { dropbear_exit("signal() error"); } pid_t proxy_cmd_pid = 0; #if DROPBEAR_CLI_PROXYCMD if (cli_opts.proxycmd) { cli_proxy_cmd(&sock_in, &sock_out, &proxy_cmd_pid); m_free(cli_opts.proxycmd); if (signal(SIGINT, kill_proxy_sighandler) == SIG_ERR || signal(SIGTERM, kill_proxy_sighandler) == SIG_ERR || signal(SIGHUP, kill_proxy_sighandler) == SIG_ERR) { dropbear_exit("signal() error"); } } else #endif { progress = connect_remote(cli_opts.remotehost, cli_opts.remoteport, cli_connected, &ses, cli_opts.bind_address, cli_opts.bind_port); sock_in = sock_out = -1; } cli_session(sock_in, sock_out, progress, proxy_cmd_pid); /* not reached */ return -1; }
int cli_main(int argc, char ** argv) { #else int main(int argc, char ** argv) { #endif int sock_in, sock_out; char* error = NULL; char* hostandport; int len; _dropbear_exit = cli_dropbear_exit; _dropbear_log = cli_dropbear_log; disallow_core(); cli_getopts(argc, argv); TRACE(("user='******' host='%s' port='%s'", cli_opts.username, cli_opts.remotehost, cli_opts.remoteport)) if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) { dropbear_exit("signal() error"); } #ifdef ENABLE_CLI_PROXYCMD if (cli_opts.proxycmd) { cli_proxy_cmd(&sock_in, &sock_out); } else #endif { int sock = connect_remote(cli_opts.remotehost, cli_opts.remoteport, 0, &error); sock_in = sock_out = sock; } if (sock_in < 0) { dropbear_exit("%s", error); } /* Set up the host:port log */ len = strlen(cli_opts.remotehost); len += 10; /* 16 bit port and leeway*/ hostandport = (char*)m_malloc(len); snprintf(hostandport, len, "%s:%s", cli_opts.remotehost, cli_opts.remoteport); cli_session(sock_in, sock_out, hostandport); /* not reached */ return -1; }
int cli_main(int argc, char ** argv) { #else int main(int argc, char ** argv) { #endif int sock_in, sock_out; char* error = NULL; _dropbear_exit = cli_dropbear_exit; _dropbear_log = cli_dropbear_log; disallow_core(); seedrandom(); crypto_init(); cli_getopts(argc, argv); TRACE(("user='******' host='%s' port='%s'", cli_opts.username, cli_opts.remotehost, cli_opts.remoteport)) if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) { dropbear_exit("signal() error"); } #ifdef ENABLE_CLI_PROXYCMD if (cli_opts.proxycmd) { cli_proxy_cmd(&sock_in, &sock_out); m_free(cli_opts.proxycmd); } else #endif { int sock = connect_remote(cli_opts.ipfamily, cli_opts.remotehost, cli_opts.remoteport, 0, &error); sock_in = sock_out = sock; if (cli_opts.wantpty) { set_sock_priority(sock, DROPBEAR_PRIO_LOWDELAY); } } if (sock_in < 0) { dropbear_exit("%s", error); } cli_session(sock_in, sock_out); /* not reached */ return -1; }
int cli_main(int argc, char ** argv) { #else int main(int argc, char ** argv) { #endif int sock_in, sock_out; struct dropbear_progress_connection *progress = NULL; _dropbear_exit = cli_dropbear_exit; _dropbear_log = cli_dropbear_log; disallow_core(); seedrandom(); crypto_init(); cli_getopts(argc, argv); TRACE(("user='******' host='%s' port='%s'", cli_opts.username, cli_opts.remotehost, cli_opts.remoteport)) if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) { dropbear_exit("signal() error"); } #ifdef ENABLE_CLI_PROXYCMD if (cli_opts.proxycmd) { cli_proxy_cmd(&sock_in, &sock_out); m_free(cli_opts.proxycmd); } else #endif { progress = connect_remote(cli_opts.ipfamily, cli_opts.remotehost, cli_opts.remoteport, cli_connected, &ses); sock_in = sock_out = -1; } cli_session(sock_in, sock_out, progress); /* not reached */ return -1; }
int cli_main(int argc, char ** argv) { #else int main(int argc, char ** argv) { #endif #if 0 int sock_in, sock_out; char* error = NULL; #endif _dropbear_exit = cli_dropbear_exit; _dropbear_log = cli_dropbear_log; disallow_core(); cli_getopts(argc, argv); #if 0 TRACE(("user='******' host='%s' port='%s'", cli_opts.username, cli_opts.remotehost, cli_opts.remoteport)) #endif TRACE(("user='******' remotehost='%s'", cli_opts.username, cli_opts.remote_name_str)); if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) { dropbear_exit("signal() error"); } #if 0 #ifdef ENABLE_CLI_PROXYCMD if (cli_opts.proxycmd) { cli_proxy_cmd(&sock_in, &sock_out); m_free(cli_opts.proxycmd); } else #endif { int sock = connect_remote(cli_opts.remotehost, cli_opts.remoteport, 0, &error); sock_in = sock_out = sock; } if (sock_in < 0) { dropbear_exit("%s", error); } cli_session(sock_in, sock_out); #endif srand(time(NULL)); cli_opts.ssh_ccn = ccn_create(); cli_opts.ccn_cached_keystore = ccn_init_keystore(); if( cli_opts.ssh_ccn == NULL || ccn_connect(cli_opts.ssh_ccn,NULL) == -1 ) dropbear_exit("Failed to connect to ccnd"); ccn_publish_host_key(); ccn_publish_client_mountpoint(); ccn_ssh_connect(cli_opts.remote_name_str); // Wait for server response ccn_run(cli_opts.ssh_ccn,-1); /* not reached */ return -1; }