void Stage0(void) { char buf[MAXLEN]; MYSQL_RES *mysql_res; MYSQL_ROW row; snprintf(buf,MAXLEN,"select phone,memo from VIPMAC where MAC='%s'",MAC); mysql_res = ExecSQL(buf,1); row = mysql_fetch_row(mysql_res); if( row ) { snprintf(PHONE,12,row[0]); snprintf(buf,MAXLEN,"insert into Log values('%s','%s','%s',now(),'VIP %s auto online 7 day')", remote_addr(), MAC, PHONE, row[1]); ExecSQL(buf,0); IPOnline(7*24*3600); } snprintf(buf,MAXLEN,"select phone,timestampdiff(second,now(),end) from MACPhone where MAC='%s' and now()< end",MAC); mysql_res = ExecSQL(buf,1); row = mysql_fetch_row(mysql_res); if( row ) { snprintf(PHONE,12,row[0]); snprintf(buf,MAXLEN,"insert into Log values('%s','%s','%s',now(),'auto online %s sec')", remote_addr(), MAC, PHONE, row[1]); ExecSQL(buf,0); IPOnline(atoi(row[1])); } DisplayStage('0',NULL,0); exit(0); }
void IPOnline( int timespan ) { char buf[MAXLEN]; char *url; setuid(0); snprintf(buf,MAXLEN,"/usr/sbin/ipset add -exist user %s,%c%c:%c%c:%c%c:%c%c:%c%c:%c%c timeout %d", remote_addr(), MAC[0],MAC[1],MAC[2],MAC[3],MAC[4],MAC[5],MAC[6],MAC[7],MAC[8],MAC[9],MAC[10],MAC[11], timespan ); system(buf); snprintf(buf,MAXLEN,"insert into IPMACPhone values('%s', '%s','%s',now(), date_add(now(), interval %d second))", remote_addr(),MAC,PHONE,timespan); ExecSQL(buf,0); url=GetValue("url"); if(url && (*url) && (strcmp(url,"URL")!=0)) { if( HtmlHeadOut==0 ) { HtmlHead(); PrintFile("/var/www/html/redir.html"); } printf("<script language=\"javascript\" type=\"text/javascript\">" "window.location.href=\"%s\";</script>\n", url); printf("请继续访问<a href=%s>%s</a><p>",url,url); printf("</body></html>\n"); mysql_close(mysql); exit(0); } DisplayStage('2',"欢迎使用网络",0); }
/** \brief Start the operation */ ntudp_err_t ntudp_itor_t::start() throw() { // sanity check DBG_ASSERT( ntudp_peer != NULL ); DBG_ASSERT( remote_addr().is_null() == false ); // if no profile is already set, take the one from ntudp_peer_t if( !profile ) profile = nipmem_new ntudp_itor_profile_t(ntudp_peer->get_profile().itor()); // if the expire_delay has NOT been set, get the default value if( expire_delay.is_null() ) expire_delay = profile->expire_delay(); // start the timeout expire_timeout.start(expire_delay, this, NULL); // init some variable for the kad_query_t kad_keyid_t record_keyid = remote_addr().peerid().to_canonical_string(); kad_peer_t * kad_peer = ntudp_peer->kad_peer(); kad_err_t kad_err; // create and start the kad_query_t kad_query = nipmem_new kad_query_t(); kad_err = kad_query->start(kad_peer, record_keyid, 0, delay_t::ALWAYS, this, NULL); if( kad_err.failed() ) return ntudp_err_from_kad(kad_err); // return no error return ntudp_err_t::OK; }
/** \brief The common part of all subitor callback * * - NOTE: this deletes ALL subitor */ void ntudp_itor_t::subitor_common_cb(udp_full_t *udp_full, const pkt_t &estapkt_in , const pkt_t &estapkt_out) throw() { // if no subitor are running (aka they all failed), notify NO_ROUTE_TO_HOST if( sub_itor_is_running() == false ){ std::string reason = "No route to PeerID " + remote_addr().peerid().to_string(); notify_callback( ntudp_event_t::build_no_route_to_host(reason) ); return; } // if this subitor failed, do nothing if( udp_full == NULL ) return; // create the ntudp_full_t ntudp_full_t *ntudp_full = nipmem_new ntudp_full_t(ntudp_peer, local_addr(), remote_addr(), udp_full); // set the ntudp_full_t estapkt ntudp_full->set_estapkt(estapkt_in, estapkt_out); // delete all the subitor delete_all_subitor(); // notify the event ntudp_event_t ntudp_event = ntudp_event_t::build_cnx_established(ntudp_full); notify_callback( ntudp_event ); }
char * FilterLine ( char * line) { static char buf[MAXLEN]; char *url; int i = 0; char *s, *p, *ps; p = GetValue("url"); if( (p==0) || (*p==0) ) url = NULL; else url = p; p = line; while(*p) { s = "USERIP"; if((ps=strstr(p,s))) { strncpy(buf+i,p,ps-p); i += ps-p; strcpy(buf+i,remote_addr()); i += strlen(remote_addr()); p=ps+strlen(s); continue; } s = "MACADDR"; if((ps=strstr(p,s))) { strncpy(buf+i,p,ps-p); i += ps-p; strcpy(buf+i,MAC); i += strlen(MAC); p=ps+strlen(s); continue; } s = "MSG"; if((ps=strstr(p,s))) { strncpy(buf+i,p,ps-p); i += ps-p; strcpy(buf+i,DeferMSG); i += strlen(DeferMSG); p=ps+strlen(s); continue; } s = "PHONE"; if((ps=strstr(p,s))) { strncpy(buf+i,p,ps-p); i += ps-p; strcpy(buf+i,PHONE); i += strlen(PHONE); p=ps+strlen(s); continue; } if(url) { s = "URL"; if((ps=strstr(p,s))) { strncpy(buf+i,p,ps-p); i += ps-p; strcpy(buf+i,url); i += strlen(url); p=ps+strlen(s); continue; } } strcpy(buf+i,p); break; } return buf; }
/** \brief Set the remote address * * - NOTE: this is binding the connection * - if the local_addr is to be specified by the caller, it MUST be before this function. */ ntudp_err_t ntudp_itor_t::set_remote_addr(ntudp_peer_t *ntudp_peer , const ntudp_addr_t &m_remote_addr) throw() { // sanity check - ntudp_peer MUST NOT be null DBG_ASSERT( ntudp_peer ); // -- Set the local address stuff // if the local_addr has been NOT been set, set it to a random portid if( m_local_addr.is_null() ) m_local_addr = ntudp_addr_t(ntudp_peer->local_peerid(), ntudp_portid_t::build_random()); // if the local_addr peerid is not qualified, set it to the ntudp_peer_t one if( m_local_addr.peerid().is_null() ) m_local_addr.peerid(ntudp_peer->local_peerid()); // sanity check - the local_addr peerid MUST be the same as the ntudp_peer_t one DBG_ASSERT( local_addr().peerid() == ntudp_peer->local_peerid() ); // sanity check - the local_addr and remote_addr MUST be fully qualified DBG_ASSERT( local_addr().is_fully_qualified() ); DBG_ASSERT( m_remote_addr.is_fully_qualified() ); // copy some parameter this->ntudp_peer = ntudp_peer; this->m_remote_addr = m_remote_addr; // if this connection address is already bound, return ntudp_err_t::ALREADY_BOUND if( ntudp_peer->cnxaddr_is_bound(local_addr(), remote_addr()) ) return ntudp_err_t::ALREADY_BOUND; // link this object to the ntudp_peer_t // - NOTE: it MUST be linked AFTER already_bound check or ntudp_itor_t will conflict with itself ntudp_peer->ntudp_itor_link(this); // return no error return ntudp_err_t::OK; }
/** \brief Start the operation */ socket_err_t socket_full_udp_t::start() throw() { nlay_err_t nlay_err; inet_err_t inet_err; // sanity check - udp_full and nlay_full MUST be set DBG_ASSERT( udp_full ); DBG_ASSERT( nlay_full ); DBG_ASSERT( callback ); // TODO ISSUE with udp_full_t being already started when arriving here inet_err = udp_full->set_callback(this, NULL); if( !inet_err.succeed() ) return socket_err_from_inet(inet_err); // start nlay_full nlay_err = nlay_full->start(this, NULL); if( !nlay_err.succeed() ) return socket_err_from_nlay(nlay_err); // read the local_addr() once the socket is started m_local_addr = socket_addr_t(domain().to_string() + "://" + udp_full->get_local_addr().to_string()); DBG_ASSERT( !local_addr().is_null() ); // read the remote_addr() once the socket is started m_remote_addr = socket_addr_t(domain().to_string() + "://" + udp_full->get_remote_addr().to_string()); DBG_ASSERT( !remote_addr().is_null() ); // read the socket_type_t once the socket is started m_socket_type = socket_type_from_nlay(nlay_full->get_inner_type()); DBG_ASSERT( !type().is_null() ); // enable mtu_pathdisc on outter connection IIF socket_type_t::is_stream() is true if( type().is_stream() ) udp_full->mtu_pathdisc(true); // notify nlay_full of its current outter mtu - thus it can propagate it thru nlay_full nlay_full->mtu_outter( udp_full->mtu_inner() ); // return no error return socket_err_t::OK; }
int run_main (int argc, ACE_TCHAR *argv[]) { ACE_START_TEST (ACE_TEXT ("Reactor_Exceptions_Test")); ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("Starting tracing\n"))); u_short port = argc > 1 ? ACE_OS::atoi (argv[1]) : ACE_DEFAULT_SERVER_PORT; ACE_INET_Addr local_addr (port); ACE_INET_Addr remote_addr (port, ACE_LOCALHOST, PF_INET); ACE_Reactor reactor (new My_Reactor, true); ACE_Reactor::instance (&reactor); ACE_Thread_Manager *thr_mgr = ACE_Thread_Manager::instance (); { // Make sure handler gets cleaned up before reactor by putting it in its // own scope My_Handler handler (local_addr); if (ACE_Reactor::instance ()->register_handler (&handler, ACE_Event_Handler::READ_MASK) == -1) ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("%p\n"), ACE_TEXT ("register_handler")), -1); #if defined (ACE_HAS_THREADS) thr_mgr->spawn (ACE_THR_FUNC (worker)); #else // Need to figure out how to implement this test. ACE_ERROR ((LM_INFO, ACE_TEXT ("threads not supported on this platform\n"))); #endif /* ACE_HAS_THREADS */ ACE_SOCK_Dgram dgram (ACE_sap_any_cast (ACE_INET_Addr &), PF_INET); for (size_t i = 0; i < ACE_MAX_ITERATIONS; i++) dgram.send (ACE_TEXT ("Hello"), sizeof (ACE_TEXT ("Hello")), remote_addr); // Barrier to wait for the other thread to return. thr_mgr->wait (); handler.close (); dgram.close (); } ACE_DEBUG ((LM_DEBUG, ACE_TEXT (" (%t) exiting main\n"))); ACE_END_TEST; return 0; }
/** \brief callback notified when a command in a kad_query_t has an event to notify */ bool ntudp_itor_t::neoip_kad_query_cb(void *cb_userptr, kad_query_t &cb_kad_query , const kad_event_t &kad_event) throw() { // log to debug KLOG_DBG("enter event=" << kad_event); // sanity check - the kad_event MUST be query_ok() DBG_ASSERT( kad_event.is_query_ok() ); // sanity check - the reporter cb_kad_query MUST be the local one DBG_ASSERT( kad_query == &cb_kad_query ); // sanity check - the kad_event_t MUST be a kad_event_t::RECDUPS // - kad_event_t::TIMEDOUT is possible on kad_query but not here as the timeout is delay_t::NEVER DBG_ASSERT( kad_event.is_recdups() ); // copy the kad_recdups_t before deleting the command kad_recdups_t kad_recdups = kad_event.get_recdups(NULL); // delete the kad_query_t and mark is unused nipmem_zdelete kad_query; // if no record have been returned, notify a ntudp_event_t::UNKNOWN_HOST if( kad_recdups.size() == 0 ){ std::string reason = "No Peer Record for " + remote_addr().peerid().to_string(); notify_callback( ntudp_event_t::build_unknown_host(reason) ); return false; } // handle the received kad_recdups_t handle_recved_kad_recdups(kad_recdups); // log to debug KLOG_DBG("direct_db.size()=" << direct_db.size()); KLOG_DBG("estarelay_db.size()=" << estarelay_db.size()); KLOG_DBG("reverse_db.size()=" << reverse_db.size()); // if no sub-itor are running, notify a ntudp_event_t::NO_ROUTE_TO_HOST if( !sub_itor_is_running() ){ std::string reason = "No route to PeerID " + remote_addr().peerid().to_string(); notify_callback( ntudp_event_t::build_no_route_to_host(reason) ); return false; } // return 'dontkeep' as the command has just been deleted return false; }
/** \brief convert the object to a string */ std::string socket_full_tcp_t::to_string() const throw() { std::ostringstream oss; // build the string oss << "connected"; oss << " in " << type(); oss << " from " << local_addr(); oss << " to " << remote_addr(); // return the just built string return oss.str(); }
virtual int handle_timeout(const time_value &) { for (int i = 0; i < 32; ++i) { if (this->conn_list_.size() > 256) break; inet_address remote_addr(g_port, g_host); time_value tv(2, 0); this->connector_.connect(new short_conn(), remote_addr, &tv); } return 0; }
virtual int init (int argc, ACE_TCHAR *argv[]) { ACE_TRACE ("Client::init"); const ACE_TCHAR *r_addr = argc > 1 ? argv[1] : ACE_DEFAULT_RENDEZVOUS; ACE_UPIPE_Addr remote_addr (r_addr); Client_Service *cs; ACE_NEW_RETURN (cs, Client_Service (this->thr_mgr_), -1); return this->connect (cs, remote_addr); }
int ACE_TMAIN (int argc, ACE_TCHAR *argv[]) { const ACE_TCHAR *rendezvous = argc > 1 ? argv[1] : ACE_DEFAULT_RENDEZVOUS; char buf[BUFSIZ]; ACE_LSOCK_Stream cli_stream; ACE_LSOCK_Connector con; ACE_UNIX_Addr remote_addr (rendezvous); // Establish the connection with server. if (con.connect (cli_stream, remote_addr) == -1) ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("%p\n"), ACE_TEXT ("connect")), 1); // Send data to server (correctly handles "incomplete writes"). for (int r_bytes; (r_bytes = ACE_OS::read (ACE_STDIN, buf, sizeof buf)) > 0; ) if (cli_stream.send_n (buf, r_bytes) == -1) ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("%p\n"), ACE_TEXT ("send_n")), 1); // Explicitly close the writer-side of the connection. if (cli_stream.close_writer () == -1) ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("%p\n"), ACE_TEXT ("close_writer")), 1); // Wait for handshake with server. if (cli_stream.recv_n (buf, 1) != 1) ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("%p\n"), ACE_TEXT ("recv_n")), 1); // Close the connection completely. if (cli_stream.close () == -1) ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("%p\n"), ACE_TEXT ("close")), 1); return 0; }
int main( int argc, char** argv ) { wawo::app::App application ; wawo::net::SocketAddr remote_addr( "192.168.2.7", 12121 ); WAWO_REF_PTR<wawo::net::Socket> socket ( new wawo::net::Socket( remote_addr,wawo::net::F_AF_INET , wawo::net::ST_STREAM, wawo::net::P_TCP ) ); int rt = socket->Open(); WAWO_RETURN_V_IF_NOT_MATCH(rt, rt == wawo::OK); rt = socket->Connect(); WAWO_RETURN_V_IF_NOT_MATCH(rt, rt == wawo::OK); WWRP<wawo::net::core::TLP_Abstract> tlp(new typename PeerT::TLPT()); socket->SetTLP(tlp); rt = socket->TLP_Handshake(); WAWO_RETURN_V_IF_NOT_MATCH(rt, rt == wawo::OK); WAWO_REF_PTR<PeerT> peer(new PeerT()); peer->AttachSocket(socket); int sndhellort; PEER_SND_HELLO(peer, sndhellort); WAWO_ASSERT(sndhellort==wawo::OK); int ec; do { WWSP<MessageT> arrives[5]; wawo::u32_t count = peer->DoReceiveMessages(arrives, 5, ec); WAWO_ASSERT(count == 1); WAWO_ASSERT(ec == wawo::OK); WAWO_ASSERT(arrives[0]->GetType() == wawo::net::peer::message::Wawo::T_RESPONSE ); wawo::Len_CStr reqstr("this is request from client"); WWSP<wawo::algorithm::Packet> reqpack( new wawo::algorithm::Packet() ); reqpack->Write<wawo::u32_t>(services::C_ECHO_STRING_REQUEST_TEST); reqpack->Write<wawo::u32_t>(reqstr.Len()); reqpack->Write((wawo::byte_t*)reqstr.CStr(),reqstr.Len()); reqpack->WriteLeft < wawo::net::ServiceIdT >(services::S_ECHO); WWSP< MessageT> message_to_req(new MessageT(reqpack)); int sndrt = peer->Request(message_to_req); WAWO_ASSERT(sndrt == wawo::OK); } while (ec == wawo::OK); WAWO_LOG_WARN( "main", "socket server exit ..." ) ; return wawo::OK; }
int CGImain(void) { char *s; ConnectDB(); s = GetValue("s"); GetMAC(remote_addr()); if(MAC[0]==0) DisplayStage('0',"无法获取MAC地址",1); if ( (s== NULL) || *s=='0') Stage0(); else if( *s=='1') Stage1(); else if(*s=='2') { Stage2(); } else Stage0(); return 0; }
int TCPClient::connect(const char* host, uint16_t port) { int rv = 0; if(isWanReady()) { uint32_t ip_addr = 0; if(gethostbyname((char*)host, strlen(host), &ip_addr) > 0) { IPAddress remote_addr(BYTE_N(ip_addr, 3), BYTE_N(ip_addr, 2), BYTE_N(ip_addr, 1), BYTE_N(ip_addr, 0)); return connect(remote_addr, port); } } return rv; }
int ACE::HTBP::ID_Requestor::connect_to_server (ACE_SOCK_Stream *cli_stream) { if (port_ == 0 || host_.length() == 0) { int host_start = url_.find (ACE_TEXT("http://")) + 7; int port_sep = 0; int sep = 0; if (host_start == -1) ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT("(%P|%t) ACE::HTBP::ID_Requestor::") ACE_TEXT("connect_to_server: ") ACE_TEXT("invalid URL: \"%s\"\n"), url_.c_str()), -1); port_sep = url_.find (ACE_TEXT(":"),(size_t)host_start); sep = url_.find (ACE_TEXT("/"),(size_t)host_start); if (sep == -1 || sep == host_start +1) ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT("(%P|%t) ACE::HTBP::ID_Requestor::") ACE_TEXT("connect_to_server: ") ACE_TEXT("invalid URL: \"%s\"\n"), url_.c_str()), -1); if (port_sep == -1) { port_sep = sep; port_ = 80; // should be a default? } host_ = url_.substr(host_start,port_sep - host_start); } ACE_INET_Addr remote_addr (static_cast<u_short> (port_), host_.c_str()); ACE_SOCK_Connector con; if (con.connect (*cli_stream, remote_addr) == -1) ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT("(%P|%t) ACE::HTBP::ID_Requestor::") ACE_TEXT("connect_to_server: ") ACE_TEXT("%p\n"), ACE_TEXT("socket connect")), -1); return 0; }
virtual int handle_timeout(const time_value &now) { if (this->sock_status_ == _SOCK_INIT && !this->be_connecting_) { this->be_connecting_ = true; inet_address remote_addr(this->port_, this->host_); s_connector.connect(this, remote_addr, NULL, MAX_INNER_SOCKET_BUF_SIZE); s_log->rinfo("begin to connect db proxy %s:%d!", this->host_, this->port_); return 0; }else if (this->sock_status_ == _SOCK_ACTIVE || this->sock_status_ == _SOCK_CON_OK) { if (this->do_heart_beat() == 0 && this->check_heart_beat(now) == 0) return 0; return -1; } return 0; }
/** \brief Start the operation */ socket_err_t socket_full_tcp_t::start() throw() { inet_err_t inet_err; // sanity check - tcp_full and nlay_full MUST be set DBG_ASSERT( tcp_full ); DBG_ASSERT( callback ); // start the tcp_full_t inet_err = tcp_full->start(this, NULL); if( !inet_err.succeed() ) return socket_err_from_inet(inet_err); // read the local_addr() once the socket is started m_local_addr = socket_addr_t(domain().to_string() + "://" + tcp_full->local_addr().to_string()); DBG_ASSERT( !local_addr().is_null() ); // read the remote_addr() once the socket is started m_remote_addr = socket_addr_t(domain().to_string() + "://" + tcp_full->remote_addr().to_string()); DBG_ASSERT( !remote_addr().is_null() ); // return no error return socket_err_t::OK; }
void AsyncTCPSocket::ProcessInput(char * data, size_t& len) { SocketAddress remote_addr(GetRemoteAddress()); while (true) { if (len < PKT_LEN_SIZE) return; PacketLength pkt_len; memcpy(&pkt_len, data, PKT_LEN_SIZE); pkt_len = NetworkToHost16(pkt_len); if (len < PKT_LEN_SIZE + pkt_len) return; SignalReadPacket(this, data + PKT_LEN_SIZE, pkt_len, remote_addr); len -= PKT_LEN_SIZE + pkt_len; if (len > 0) { memmove(data, data + PKT_LEN_SIZE + pkt_len, len); } } }
void Stage2() // setonline { char *phone,*password,*p; char buf[MAXLEN]; MYSQL_RES *mysql_res; MYSQL_ROW row; phone = GetValue("phone"); if( (phone==NULL) || (phone[0]==0) ) DisplayStage('0',"输入的电话号码为空",1); CheckPhone(phone); strncpy(PHONE,phone,12); password = GetValue("password"); if((password==NULL) || strlen(password)!=6) DisplayStage('1',"请输入密码",1); snprintf(buf,MAXLEN,"select pass from PhonePass where phone='%s' and valid>now()",phone); mysql_res = ExecSQL(buf,1); row = mysql_fetch_row(mysql_res); if( row==NULL ) DisplayStage('0',"未查到一周内的电话号码信息,请重新输入",1); if( strcmp(row[0],password)!=0 ) { DisplayStage('1',"密码错误,请重新输入",1); } p=GetValue("timespan"); if ( (p==NULL) || (*p==0) ) p="1"; *(p+1)=0; if ((*p!='1') && (*p!='7') ) p="1"; snprintf(buf,MAXLEN,"replace into MACPhone values('%s','%s',now(), date_add(now(), interval %s day))", MAC,PHONE,p); ExecSQL(buf,0); snprintf(buf,MAXLEN,"insert into Log values('%s','%s','%s',now(),'online %s day')", remote_addr(), MAC, PHONE, p); ExecSQL(buf,0); IPOnline((*p-'0')*24*3600); }
int handle_timeout(const time_value &now) { time_util::now = now.sec(); for (int i = 0; i < 40 && g_curr_payload < g_total_payload; ++i, ++this->id_) { if (this->id_ >= begin_id + g_total_payload) { e_log->rinfo("may be kick out other robot, because:"); e_log->rinfo(" robot id shoudle be [%d---%d], now is:%d", begin_id, begin_id + g_total_payload -1, this->id_); } inet_address remote_addr(port, host); time_value tv(30, 0); char ac_bf[32] = {0}; ::snprintf(ac_bf, sizeof(ac_bf), "robot_%d", this->id_); char name_bf[32] = {0}; ::snprintf(name_bf, sizeof(name_bf), "name_%d", this->id_); if (robot_connector.connect(new player(ac_bf, name_bf), remote_addr, &tv) != 0) e_log->rinfo("connect world failed!"); } return 0; }
int ACE_TMAIN (int argc, ACE_TCHAR *argv[]) { if (argc < 2) ACE_ERROR_RETURN ((LM_ERROR, "Usage: %s [-s selector] hostname [QoS in KB/sec]\n", argv[0]), 1); unsigned char selector = ACE_ATM_Addr::DEFAULT_SELECTOR; int selector_specified = 0; extern int optind; int opt; while ((opt = ACE_OS::getopt (argc, argv, "s:?h")) != EOF) { switch(opt) { case 's': selector = ACE_OS::atoi (optarg); selector_specified = 1; break; case '?': case 'h': ACE_ERROR_RETURN ((LM_ERROR, "Usage: %s hostname [-s selector] [QoS in KB/s]\n", argv[0]), 1); } // switch } // while getopt const char *host = argv[optind]; int rate = (argc == 3) ? ACE_OS::atoi (argv[2]) : (argc == 5) ? ACE_OS::atoi (argv[4]) : 0; // The timeout really gets ignored since FORE's drivers don't work when // ioctl or fcntl calls are made on the transport id/file descriptor int timeout = ACE_DEFAULT_TIMEOUT; char buf[BUFSIZ]; ACE_TLI_Stream cli_stream; ACE_ATM_Addr remote_addr (host); if (selector_specified) remote_addr.set_selector(selector); char hostname[MAXNAMELEN]; ACE_OS::hostname(hostname, MAXNAMELEN); ACE_ATM_Addr local_addr (hostname); // In order to construct connections options the file handle is // needed. Therefore, we need to open the TLI_Stream before we // construct the options. if (cli_stream.open (ACE_XTI_ATM_DEVICE, O_RDWR, 0) == -1) ACE_ERROR_RETURN ((LM_ERROR, "%p\n", "open failed"), 1); ACE_DEBUG ((LM_DEBUG, "starting non-blocking connect\n")); // Initiate timed, non-blocking connection with server. ACE_TLI_Connector con; // Construct QoS options - currently FORE only supports bandwidth ACE_ATM_QoS qos; qos.set_rate(cli_stream.get_handle (), rate, ACE_ATM_QoS::OPT_FLAGS_CPID); struct netbuf optbuf = qos.get_qos(); // long optlen = 0; // char *options = remote_addr.construct_options (cli_stream.get_handle (), // rate, // ACE_ATM_Addr::OPT_FLAGS_CPID, // &optlen); // struct netbuf optbuf; // optbuf.len = optlen; // optbuf.buf = options; // Not sure why but reuse_addr set to true/1 causes problems for // FORE/XTI/ATM - this is now handled in ACE_TLI_Connector::connect() if (con.connect (cli_stream, remote_addr, (ACE_Time_Value *) &ACE_Time_Value::zero, local_addr, 1, O_RDWR, 0, ACE_XTI_ATM_DEVICE, 0, 1, 0, &optbuf) == -1) { if (errno != EWOULDBLOCK) ACE_ERROR_RETURN ((LM_ERROR, "%p\n", "connection failed"), 1); ACE_DEBUG ((LM_DEBUG, "starting timed connect\n")); // Check if non-blocking connection is in progress, and wait up // to timeout seconds for it to complete. ACE_Time_Value tv (timeout); if (con.complete (cli_stream, &remote_addr, &tv) == -1) ACE_ERROR_RETURN ((LM_ERROR, "%p\n", "connection failed"), 1); else ACE_DEBUG ((LM_DEBUG, "connected to %s\n", remote_addr.addr_to_string ())); } // Send data to server (correctly handles "incomplete writes"). for (int r_bytes; (r_bytes = ACE_OS::read (ACE_STDIN, buf, sizeof buf)) > 0; ) if (cli_stream.send_n (buf, r_bytes, 0) == -1) ACE_ERROR_RETURN ((LM_ERROR, "%p\n", "send_n"), 1); // Explicitly close the connection. if (cli_stream.close () == -1) ACE_ERROR_RETURN ((LM_ERROR, "%p\n", "close"), -1); return 0; }
void Stage1() // sendsms, dispay input page { char *phone,*p; char buf[MAXLEN]; char pass[MAXLEN]; MYSQL_RES *mysql_res; MYSQL_ROW row; FILE *fp; p = GetValue("changenum"); if ( p ) DisplayStage('0',"请输入电话号码",0); phone = GetValue("phone"); if( phone==NULL || phone[0]==0 ) DisplayStage('0',"输入的电话号码为空",1); CheckPhone(phone); strncpy(PHONE,phone,12); p = GetValue("havepass"); if(p) DisplayStage('1',"请输入密码",0); // 检查该设备当天是否发送过短信, 每天最多 MAXPERMAC snprintf(buf,MAXLEN,"select count from MACcount where MAC='%s' and sendday=curdate()",MAC); mysql_res = ExecSQL(buf,1); row = mysql_fetch_row(mysql_res); if( row ) { if( atoi(row[0]) >= MAXPERMAC ) { sprintf(buf,"每台设备每天允许%d手机登录,今天已经使用%s次,请换台设备再试",MAXPERMAC,row[0]); DisplayStage('0',buf,1); } snprintf(buf,MAXLEN,"update MACcount set count=count+1 where MAC='%s' and sendday=curdate()",MAC); ExecSQL(buf,0); } else { snprintf(buf,MAXLEN,"replace into MACcount values ('%s', now(), 1)",MAC); ExecSQL(buf,0); } // 检查手机当天是否发送过短信, 每天最多 MAXPERPHONE snprintf(buf,MAXLEN,"select count from Phonecount where phone='%s' and sendday=curdate()",PHONE); mysql_res = ExecSQL(buf,1); row = mysql_fetch_row(mysql_res); if( row ) { if( atoi(row[0]) >= MAXPERPHONE ) { sprintf(buf,"每个手机每天允许%d短信,今天已经使用%s次,请换手机再试",MAXPERPHONE,row[0]); DisplayStage('0',buf,1); } snprintf(buf,MAXLEN,"update Phonecount set count=count+1 where phone='%s' and sendday=curdate()",PHONE); ExecSQL(buf,0); } else { snprintf(buf,MAXLEN,"replace into Phonecount values ('%s', now(), 1)",PHONE); ExecSQL(buf,0); } snprintf(buf,MAXLEN,"select pass from PhonePass where phone='%s' and now()<valid",PHONE); mysql_res = ExecSQL(buf,1); row = mysql_fetch_row(mysql_res); if( row==NULL ) { srand(time(NULL)); int i; for(i=0;i<6;i++) { int r; r=rand(); pass[i]='0' + r%10; } pass[6]=0; } else strncpy(pass,row[0],7); snprintf(buf,MAXLEN,"replace into PhonePass values ('%s', '%s', date_add(now(), interval 8 day) )",PHONE,pass); ExecSQL(buf,0); snprintf(buf,MAXLEN,"php /usr/src/sendsms/sendsms.php %s \"%s是您在中国科大访客WLAN密码,一周内都可以使用本密码登录,请保留本短信。\" 2>/dev/null",PHONE,pass); fp=popen(buf,"r"); if(fp==NULL){ snprintf(buf,MAXLEN,"insert into Log values('%s','%s','%s',now(),'send pass error')", remote_addr(), MAC, PHONE); ExecSQL(buf,0); DisplayStage('0',"密码发送失败",1); } fgets(buf,MAXLEN,fp); if(strncmp(buf,"OK",2)==0) { snprintf(buf,MAXLEN,"insert into Log values('%s','%s','%s',now(),'send pass ok')", remote_addr(), MAC, PHONE); ExecSQL(buf,0); DisplayStage('1',"请输入手机上收到的密码",0); } else { char tmp[MAXLEN]; strncpy(tmp,buf,MAXLEN); snprintf(buf,MAXLEN,"insert into Log values('%s','%s','%s',now(),'send pass error %s')", remote_addr(), MAC, PHONE,tmp); ExecSQL(buf,0); DisplayStage('0',tmp,1); } }
/** \brief convert the object into a string */ std::string ntudp_itor_t::to_string() const throw() { if( is_null() ) return "null"; return remote_addr().to_string(); }
/** \brief Start the action * * @return a datum containing the reply to the request_datum */ datum_t ntudp_resp_estarelay_t::start(const datum_t &request_datum) throw() { ntudp_peer_t * ntudp_peer = ntudp_resp->ntudp_peer; ntudp_sock_pkttype_t pkttype; ntudp_peerid_t src_peerid, dst_peerid; ntudp_portid_t src_portid, dst_portid; ipport_addr_t remote_ipport; pkt_t pkt(request_datum); // parse the incoming packet try { pkt >> pkttype; pkt >> client_nonce; pkt >> dst_peerid >> dst_portid; pkt >> src_peerid >> src_portid; pkt >> remote_ipport; }catch(serial_except_t &e){ // log the event KLOG_ERR("Can't parse incoming packet due to " << e.what() ); return datum_t(); } // sanity check - the packet type MUST be ntudp_sock_pkttype_t::ESTARELAY_CNX_REQUEST DBG_ASSERT( pkttype == ntudp_sock_pkttype_t::ESTARELAY_CNX_REQUEST ); // set the local/remote ntudp_addr_t from the peerid/portid of the packet m_local_addr = ntudp_addr_t(dst_peerid, dst_portid); m_remote_addr = ntudp_addr_t(src_peerid, src_portid); // if the cnxaddr is already bound, reply an error packet ALREADY_BOUND if( ntudp_peer->cnxaddr_is_bound(local_addr(), remote_addr()) ){ // send back a error packet to the remote peer pkt_t pkt_err = ntudp_sock_errcode_build_pkt(ntudp_sock_errcode_t::ALREADY_BOUND, client_nonce); // autodelete this nipmem_delete this; // return the reply return pkt_err.to_datum(); } // try to steal a ntudp_npos_saddrecho_t from the aview_pool ntudp_aview_pool_t * aview_pool = ntudp_peer->aview_pool(); ntudp_npos_saddrecho_t *saddrecho = aview_pool->steal_one_saddrecho(); // if no ntudp_npos_saddrecho_t have been stolen, ignore this packet if( !saddrecho ){ nipmem_delete this; return datum_t(); } // extract the ipport_aview_t from the saddrecho and delete it ipport_aview_t local_aview = saddrecho->local_addr_aview(); nipmem_zdelete saddrecho; // create and start the udp_client on the ipport_aview_t from the aview_pool inet_err_t inet_err; udp_client = nipmem_new udp_client_t(); inet_err = udp_client->set_local_addr(local_aview.lview()); if( inet_err.succeed() ) inet_err = udp_client->start(remote_ipport, this, NULL); if( inet_err.failed() ){ nipmem_delete this; return datum_t(); } // return a ntudp_sock_pkttype_t::ESTARELAY_CNX_REPLY return build_estarelay_cnx_reply(local_aview.pview()).to_datum(); }
int main (int argc, char *argv[]) { const char *host = argc > 1 ? argv[1] : ACE_DEFAULT_SERVER_HOST; u_short r_port = argc > 2 ? ACE_OS::atoi (argv[2]) : ACE_DEFAULT_SERVER_PORT; int timeout = argc > 3 ? ACE_OS::atoi (argv[3]) : ACE_DEFAULT_TIMEOUT; u_short l_port = argc > 4 ? ACE_OS::atoi (argv[4]) : ACE_DEFAULT_LOCAL_PORT; char buf[BUFSIZ]; ACE_TLI_Stream cli_stream; ACE_INET_Addr remote_addr (r_port, host); ACE_INET_Addr local_addr (l_port); ACE_DEBUG ((LM_DEBUG, "starting non-blocking connect\n")); // Initiate timed, non-blocking connection with server. ACE_TLI_Connector con; if (con.connect (cli_stream, remote_addr, (ACE_Time_Value *) &ACE_Time_Value::zero, local_addr, 1) == -1) { if (errno != EWOULDBLOCK) ACE_ERROR_RETURN ((LM_ERROR, "%p\n", "connection failed"), 1); ACE_DEBUG ((LM_DEBUG, "starting timed connect\n")); // Check if non-blocking connection is in progress, and wait up // to timeout seconds for it to complete. ACE_Time_Value tv (timeout); if (con.complete (cli_stream, &remote_addr, &tv) == -1) ACE_ERROR_RETURN ((LM_ERROR, "%p\n", "connection failed"), 1); else ACE_DEBUG ((LM_DEBUG, "connected to %s\n", remote_addr.get_host_name ())); } // Send data to server (correctly handles "incomplete writes"). for (int r_bytes; (r_bytes = ACE_OS::read (ACE_STDIN, buf, sizeof buf)) > 0; ) if (cli_stream.send_n (buf, r_bytes, 0) == -1) ACE_ERROR_RETURN ((LM_ERROR, "%p\n", "send_n"), 1); // Explicitly close the connection. if (cli_stream.close () == -1) ACE_ERROR_RETURN ((LM_ERROR, "%p\n", "close"), -1); return 0; }
void CNetworkLayerTestDlg::DoConnect() { TRY_CATCH char buf[MAX_PATH]; m_RemotePort.GetWindowText( buf, MAX_PATH ); unsigned int remote_port = atoi( buf ); m_LocalPort.GetWindowText( buf, MAX_PATH ); unsigned int local_port = atoi( buf ); m_Timeout.GetWindowText( buf, MAX_PATH ); unsigned int timeout = atoi( buf ); m_RemoteAddress.GetWindowText( buf, MAX_PATH ); tstring remote_addr( buf ); // Stream.SetConnectedEvent( boost::bind( &CNetworkLayerTestDlg::OnConnected, this, _1 ) ); // Stream.SetDisconnectedEvent( boost::bind( &CNetworkLayerTestDlg::OnDisconnected, this, _1 ) ); // Stream.SetConnectErrorEvent( boost::bind( &CNetworkLayerTestDlg::OnConnectError, this, _1, _2 ) ); Stream.SetConnectTimeout( timeout ); //*************************************************************************** m_UserID.GetWindowText( buf, MAX_PATH ); tstring user_id( buf ); m_UserKey.GetWindowText( buf, MAX_PATH ); tstring user_key( buf ); Stream.GetCredentials().UserID = user_id; Stream.GetCredentials().Key = user_key; //*************************************************************************** switch ( m_Cipher ) { case 1: Stream.GetSuite().Cipher = CPH_AES_128; break; case 2: Stream.GetSuite().Cipher = CPH_AES_256; break; case 3: Stream.GetSuite().Cipher = CPH_3DES; break; case 4: Stream.GetSuite().Cipher = CPH_RC4_128; break; default: Stream.GetSuite().Cipher = CPH_NULL; } switch ( m_Compression ) { case 1: Stream.GetSuite().Compression = PRS_ZLIB; break; case 2: Stream.GetSuite().Compression = PRS_LZO; break; default: Stream.GetSuite().Compression = PRS_NULL; } switch ( m_KeyExchange ) { case 1: Stream.GetSuite().KeyExchange = KX_DHE_PSK; break; default: Stream.GetSuite().KeyExchange = KX_PSK; } Stream.GetSuite().PrimeBits = PB_1024; //*************************************************************************** m_ProxyPort.GetWindowText( buf, MAX_PATH ); unsigned int proxy_port = atoi( buf ); m_ProxyAddress.GetWindowText( buf, MAX_PATH ); tstring proxy_addr( buf ); bool use_proxy = ( BST_CHECKED == m_UseProxy.GetCheck() ); Stream.SetConnectThroughProxy( use_proxy ); Stream.GetProxySettings().ProxyURL = proxy_addr; Stream.GetProxySettings().ProxyPort = proxy_port; //*************************************************************************** m_SendList.AddString( "Connecting ..." ); try { Stream.SetLocalAddr( local_port ); Stream.SetRemoteAddr( remote_addr, remote_port ); Stream.Connect(); OnConnected(NULL); } catch(CStreamException ex) { m_SendList.AddString( ex.what.c_str() ); m_ConnectButton.EnableWindow( true ); m_DisconnectButton.EnableWindow( false ); m_SendButton.EnableWindow( false ); } CATCH_LOG("CNetworkLayerTestDlg::DoConnect") }
socket_addr_t get_remote_addr() const throw() { return remote_addr(); }
int main (int argc, char *argv[]) { #ifdef FOR_ONEROBOT if (argc != 3) { fprintf(stderr, "%s 192.168.1.221 4001!\n", argv[0]); return -1; } #else if (argc != 5) { fprintf(stderr, "%s 192.168.1.221 4001 payload begin_idx!\n", argv[0]); return -1; } #endif signal(SIGPIPE ,SIG_IGN); signal(SIGINT ,SIG_IGN); set_max_fds(1024); reactor r; if (r.open(10000, 2192) != 0) { fprintf(stderr, "open failed![%s]\n", strerror(errno)); return -1; } if (init_log() != 0) { fprintf(stderr, "init log err.\n"); return -1; } host = argv[1]; port = ::atoi(argv[2]); #ifndef FOR_ONEROBOT g_total_payload = ::atoi(argv[3]); begin_id = ::atoi(argv[4]); #endif srand(time_value::start_time.sec()); time_util::init(); robot_connector.open(&r); #ifndef FOR_ONEROBOT r.schedule_timer(new timer(begin_id), time_value(0, 800*1000), time_value(0, 800*1000)); #endif if (global_param_cfg::instance()->load_config("../config") != 0) { fprintf(stderr, "Error: config - load global_param_cfg config failed!\n"); return -1; } if (scene_config::instance()->load_config("../config") != 0) { fprintf(stderr, "Error: config - load scene config failed!\n"); return -1; } if (buff_config::instance()->load_config("../config") != 0) { fprintf(stderr, "Error: config - load buff config failed!\n"); return -1; } if (skill_config::instance()->load_config("../config") != 0) { fprintf(stderr, "Error: config - load skill config failed!\n"); return -1; } if (item_config::instance()->load_config("../config") != 0) { fprintf(stderr, "Error: config - load item config failed!\n"); return -1; } L = luaL_newstate(); luaL_openlibs(L); #ifdef FOR_LUA tolua_player_open(L); tolua_lua_istream_open(L); if (luaL_loadfile(L, "src/ai_func.lua") || lua_pcall(L, 0, 0, 0)) { fprintf(stderr, "load ai_func lua file failed!\n"); return -1; } if (luaL_loadfile(L, "src/dispatch_msg.lua") || lua_pcall(L, 0, 0, 0)) { fprintf(stderr, "load dispatch_msg lua file failed!\n"); return -1; } #endif s_log->rinfo("=============================begin================="); e_log->rinfo("=============================begin================="); #ifdef FOR_ONEROBOT ::signal(SIGABRT, svc_core_signal); //::signal(SIGSEGV, svc_core_signal); inet_address remote_addr(port, host); time_value tv(30, 0); char ac_bf[32] = {0}; login_ncurses::input_account(ac_bf); if (robot_connector.connect(new player(ac_bf, ""), remote_addr, &tv) != 0) { e_log->rinfo("connect world failed!"); return 0; } #endif r.run_reactor_event_loop(); #ifdef FOR_ONEROBOT director::instance()->exit(); #endif lua_close(L); return 0; }