Ejemplo n.º 1
0
int mid_tcp( char * ipaddr,int port,char * mgid,char  *inbuf,int inlen,char  *outbuf,int * outlen)
   {
   int    clientfd;

   /*建立连接*/
   clientfd = tcp_client_init(ipaddr ,(int ) port);
   if (clientfd < 0)
      {
      printf("tcp_client_init error!\n");
      memcpy(mgid,"0001",4);
      return(-1);
      }

   if (writesock(clientfd,inbuf,inlen) != inlen)
     {
      printf("writesock error!\n");
      memcpy(mgid,"0002",4);
      tcp_close(clientfd);
      return(-2) ;
     }

  *outlen = readsock(clientfd,outbuf); 
  if (*outlen < 0) 
     {
      printf("readsock error! return[%d]\n",*outlen);
      memcpy(mgid,"0003",4);
      tcp_close(clientfd);
      return(-3);
     }

   /*close tcp connect*/
   memcpy(mgid,"0000",4);
   tcp_close(clientfd);
   return(0);
   }
Ejemplo n.º 2
0
int main() {
   set_default_logif_level(LOG_WARN);

    int n = 1;
    evt_pool *pool = evt_pool_init(n);

    net_addr addr;
    netaddr_init_v4(&addr, "127.0.0.1", 8887);



    ohbuffer_unit_objpool *upool[n];
    int i;
    for (i = 0; i < n; i++) {
        upool[i] = (ohbuffer_unit_objpool*)ohmalloc(sizeof(ohbuffer_unit_objpool));
        bufunit_pool_init(upool[i], TCPCLIENT_OBJPOOL_BLOCKSZ, OHBUFFER_UNIT_DEFAULT_SIZE + sizeof(ohbuffer_unit));
    }
    for (i = 0; i < 1000; i++) {
        evt_loop *loop = pool->loops[i%n];
        tcp_client *client = (tcp_client*)ohmalloc(sizeof(tcp_client));
        tcp_client_init(client, &addr, loop, 0, upool[i%n], OHBUFFER_UNITPOOL_NOLOCK);
        tcp_connection_set_on_write(client, write_cb);
        tcp_connection_set_on_read(client, read_cb);
        tcp_connection_set_on_close(client, close_cb);
        tcp_connection_set_on_connect(client, connect_cb);
        if (tcp_connect(client) < 0) {
            log_error("error");
        }
    }
    evt_timer calll;
    evt_timer_init(&calll, calll_cb, SECOND(sec), SECOND(sec));
    evt_timer_start(pool->loops[0], &calll);

    // tcp_server_start(server);

    evt_pool_run(pool);


    // int i, n = 4;
    // evt_pool *pool = evt_pool_init(n);
    // tcp_server_hub *serverh = tcp_server_hub_init(&addr, pool, 0);
    // tcp_server_hub_set_on_write(serverh, write_cb);
    // tcp_server_hub_set_on_read(serverh, read_cb);
    // tcp_server_hub_set_on_close(serverh, close_cb);
    // tcp_server_hub_set_on_accept(serverh, accept_cb);
    // tcp_server_hub_start(serverh);

    // evt_timer calll;
    // evt_timer_init(&calll, calll_cb, SECOND(sec), SECOND(sec));
    // evt_set_data(&calll, serverh);
    // evt_timer_start(pool->loops[0], &calll);
    // evt_pool_run(pool);

    return 0;
}
Ejemplo n.º 3
0
ssize_t tcp_send(struct tcp_sock *m, const void *data, int size)
{
	ssize_t ret = 0;

	switch(m->state) {
	case TCP_CLIENT_DISCONNECTED:
		/* We rate-limit the amount of connect() calls. */
		if (alarm_pending(&tcp_connect_alarm)) {
			ret = -1;
			break;
		}
		add_alarm(&tcp_connect_alarm, TCP_CONNECT_TIMEOUT, 0);
		ret = connect(m->fd, (struct sockaddr *)&m->addr,
			      m->sockaddr_len);
		if (ret == -1) {
			if (errno == EINPROGRESS || errno == EALREADY) {
				/* connection in progress or already trying. */
				m->state = TCP_CLIENT_DISCONNECTED;
			} else if (errno == ECONNREFUSED) {
				/* connection refused. */
				m->state = TCP_CLIENT_DISCONNECTED;
				m->stats.error++;
			} else {
				/* unexpected error, give up. */
				m->state = TCP_CLIENT_DISCONNECTED;
				m->stats.error++;
			}
			break;
		} else {
			/* we got connected :) */
			m->state = TCP_CLIENT_CONNECTED;
		}
	case TCP_CLIENT_CONNECTED:
		ret = sendto(m->fd, data, size, 0,
			     (struct sockaddr *) &m->addr, m->sockaddr_len);
		if (ret == -1) {
			if (errno == EPIPE || errno == ECONNRESET) {
				close(m->fd);
				tcp_client_init(m, m->conf);
				m->state = TCP_CLIENT_DISCONNECTED;
				m->stats.error++;
			} else {
				m->stats.error++;
				return -1;
			}
		}
	}

	if (ret >= 0) {
		m->stats.bytes += ret;
		m->stats.messages++;
	}
	return ret;
}
Ejemplo n.º 4
0
/*
 * 函数:wifi_handle_event_cb
 * 参数:System_Event_t *evt
 * 说明:WiFi事件回调
 */
void ICACHE_FLASH_ATTR
wifi_handle_event_cb(System_Event_t *evt)
{
  os_printf("event %x\n", evt->event);

  switch (evt->event) {
      case EVENT_STAMODE_CONNECTED:
        os_printf("connect to ssid %s, channel %d\n",
          evt->event_info.connected.ssid,
          evt->event_info.connected.channel);
        break;
      case EVENT_STAMODE_DISCONNECTED:
        os_printf("disconnect from ssid %s, reason %d\n",
          evt->event_info.disconnected.ssid,
          evt->event_info.disconnected.reason);
        break;
      case EVENT_STAMODE_AUTHMODE_CHANGE:
          os_printf("mode: %d -> %d\n",
          evt->event_info.auth_change.old_mode,
          evt->event_info.auth_change.new_mode);
          break;
      case EVENT_STAMODE_GOT_IP:
        os_printf("ip:" IPSTR ",mask:" IPSTR ",gw:" IPSTR,
                IP2STR(&evt->event_info.got_ip.ip),
                IP2STR(&evt->event_info.got_ip.mask),
                IP2STR(&evt->event_info.got_ip.gw));
        os_printf("\n");

        // TODO:
        // WiFi连接后并获取IP后建立TCP连接
        tcp_client_init(HOST, PORT);


        break;
      case EVENT_SOFTAPMODE_STACONNECTED:
          os_printf("station: " MACSTR "join, AID = %d\n",
        MAC2STR(evt->event_info.sta_connected.mac),
        evt->event_info.sta_connected.aid);
          break;
      case EVENT_SOFTAPMODE_STADISCONNECTED:
          os_printf("station: " MACSTR "leave, AID = %d\n",
        MAC2STR(evt->event_info.sta_disconnected.mac),
        evt->event_info.sta_disconnected.aid);
          break;
      default:
        break;
  }
}
Ejemplo n.º 5
0
void on_accept(tcp_client *client) {
    conn_peer *cpeer = (conn_peer*)ohmalloc(sizeof(conn_peer));

    tcp_client *rclient = (tcp_client*)ohmalloc(sizeof(tcp_client));
    tcp_client_init(rclient, &serv_addr, client->loop_on, 0, NULL, 0);
    tcp_connection_set_on_connect(rclient, on_connect);
    tcp_connection_set_on_close(rclient, on_close);
    tcp_connection_set_on_read(rclient, on_read);
    tcp_connect(rclient);

    client->data = (void*)cpeer;
    rclient->data = (void*)cpeer;
    cpeer->conn[0] = client;
    cpeer->conn[1] = rclient;
    cpeer->status[0] = ON;
    cpeer->status[1] = OFF;
}
Ejemplo n.º 6
0
struct tcp_sock *tcp_client_create(struct tcp_conf *c)
{
	struct tcp_sock *m;

	m = calloc(sizeof(struct tcp_sock), 1);
	if (m == NULL)
		return NULL;

	m->conf = c;

	if (tcp_client_init(m, c) == -1) {
		free(m);
		return NULL;
	}

	init_alarm(&tcp_connect_alarm, NULL, tcp_connect_alarm_cb);

	return m;
}
Ejemplo n.º 7
0
DTrack2::DTrack2(
	const std::string& server_host, unsigned short server_port, unsigned short data_port,
	int data_bufsize, int data_timeout_us, int server_timeout_us
)
{
	int err;
	unsigned int ip;

	d_udpsock = NULL;
	d_tcpsock = NULL;
	d_udpbuf = NULL;

	set_data_noerror();
	set_server_noerror();
	cmd_storelasterror(NULL);

	d_udptimeout_us = data_timeout_us;
	d_tcptimeout_us = server_timeout_us;

	// creat UDP socket:

	d_udpport = data_port;
	
	err = udp_init(&d_udpsock, &d_udpport);

	if(err){
		d_udpport = 0;
		return;
	}

	// creat UDP buffer:

	d_udpbufsize = data_bufsize;
	
	d_udpbuf = (char *)malloc(data_bufsize);
	
	if(!d_udpbuf){
		udp_exit(d_udpsock);
		d_udpsock = NULL;
		d_udpport = 0;
		return;
	}

	// access DTrack2 server:

	if(!server_host.empty()){
		ip = ip_name2ip(server_host.c_str());
		
		if(ip == 0){  // resolving of hostname was not possible
			free(d_udpbuf);
			d_udpbuf = NULL;
			udp_exit(d_udpsock);
			d_udpsock = NULL;
			d_udpport = 0;
			return;
		}
		
		err = tcp_client_init(&d_tcpsock, ip, (server_port == 0) ? DTRACK2_PROT_TCP_PORT : server_port);
		
		if(err){  // no connection to DTrack2 server
			free(d_udpbuf);
			d_udpbuf = NULL;
			udp_exit(d_udpsock);
			d_udpsock = NULL;
			d_udpport = 0;
			return;
		}
	}
	
	// reset actual DTrack data:

	act_framecounter = 0;
	act_timestamp = -1;

	act_num_body = act_num_flystick = act_num_meatool = act_num_hand = 0;
	act_num_marker = 0;

	d_message_origin = "";
	d_message_status = "";
	d_message_framenr = 0;
	d_message_errorid = 0;
	d_message_msg = "";
}
Ejemplo n.º 8
0
INT frontend_init()
{
  /* hardware initialization */

  INT status;

  // have readout stop last to ensure it get data from simulator
  cm_set_transition_sequence 	( TR_STOP, 501);

  //initialize AMC13  RHF
  
  disableLogging();//disable uHal logging

  // initalize amc13 settings from ODB
  std::cout << "about to do amc13_ODB_init()\n";
  if ( amc13_ODB_init() != SUCCESS )
    {
      return FE_ERR_ODB;
    }
  std::cout << "finished amc13_ODB_init()\n";
    
  if( ! amc13_settings_odb.simulate_data){


    //int serialNo =1;
    //int serialNo =33;
    //int slot = 13;
    //int usingControlHub= 0;
    //std::string T2ip = "192.168.1.188";
    //std::string T1ip = "192.168.1.189";
    //std::string addrTab1="/home/daq/DAQ/amc13/map/AMC13_AddressTable_S6.xml";
    //std::string addrTab2="/home/daq/DAQ/amc13/map/AMC13_AddressTable_K7.xml";

    
    int serialNo = amc13_amc13_odb.serialNo;
    int slot = amc13_amc13_odb.slot;
    int usingControlHub = amc13_amc13_odb.usingControlHub;
    std::string T2ip = amc13_amc13_odb.T2ip;
    std::string T1ip = amc13_amc13_odb.T1ip;
    std::string addrTab1 = amc13_amc13_odb.addrTab1;
    std::string addrTab2 = amc13_amc13_odb.addrTab2;
    
    //std::string addrTab2 = "/home/gohn/gm2daq/amc13/map/AMC13_AddressTable_K7.xml";

    std::cout <<std::endl<< "AMC13 settings from ODB\n";
    std::cout << serialNo<< " "<<slot<<" "<<usingControlHub<<" "<<T2ip<<" "<<T1ip<<std::endl;
    std::cout << addrTab1 << std::endl;
    std::cout << addrTab2 << std::endl<<std::endl;
    
    Aeo = new AMC13_env(&Auo, serialNo, slot, usingControlHub);
    std::cout << "Setting IP addresses ... ";
    Aeo->setIPAddresses(T2ip,T1ip);
    std::cout << "Setting address tables ... ";
    Aeo->setAddressTables(addrTab1,addrTab2);
    std::cout << "... new cms::AMC13 ...\n";
    amc13 = new cms::AMC13(Aeo);
    
    int riders_enabled = channel_calc();
    std::cout << "Channels read " << std::hex<<riders_enabled<<std::endl;
    
    int setup_stat;
    
    if(amc13_amc13_odb.enableSoftwareTrigger) AMC13_FAKE_DATA = TRUE;
    else AMC13_FAKE_DATA = FALSE;
    

    // this configures registers in the rider
    if(!AMC13_FAKE_DATA ) frontend_init_wfd();
    

    // this configures registers in the amc13
    amc13lib.AMC13_rg(amc13);//general reset of both chips
    if(AMC13_FAKE_DATA) setup_stat = amc13lib.AMC13_FD_Setup(amc13);
    else setup_stat = amc13lib.AMC13_Rider_Setup(amc13,riders_enabled);
    printf(" AMC13 Setup commands issued \n");
    if (setup_stat==0){
      printf("STOP!  AMC13 setup failed!\n");
      return FE_ERR_HW;
    }
    
    
  
  }

  // initalize TCP settings from ODB 
  if ( amc13simulator_ODB_get() != SUCCESS )
    {
      return FE_ERR_ODB;
    }

  // MIDAS thread lock
  pthread_mutex_lock( &mutex_midas );

  // create/initialize TCP calo readout (TCP client) 
  status = tcp_client_init();
  if ( status != 0 )
    {
      cm_msg(MERROR, __FILE__, "TCP initialization failed, err = %i", status);
      return FE_ERR_HW;
    }
  dbprintf("%s(%d): TCP initialization done \n", __func__, __LINE__);                  
  // create/initialize GPU thread
  if ( gpu_thread_init() != 0 )
    {
      cm_msg(MERROR, __FILE__, "Cannot start gpu thread");
      return FE_ERR_HW;
    }
  dbprintf("%s(%d): GPU initialization done \n", __func__, __LINE__);              
  
  // create/initialize parallel port communications
#ifdef USE_PARALLEL_PORT
  printf("initialize parallel port address 0x%08x\n", pp_addr);
  if ( ioperm(pp_addr,1,1) != 0 )
    {
      cm_msg(MERROR, __FILE__, "Cannot connect to parallel port");
      return FE_ERR_HW;
    }
#endif
  

  // create/initialize RPC communications
  status = frontend_rpc_init();
  if ( status != SUCCESS )
    {
      cm_msg(MERROR, __FILE__, "RPC initialization failed, err = %i", status);
      return FE_ERR_HW;
    }
  dbprintf("%s(%d): RPC initialization done \n", __func__, __LINE__);                  
  
  return SUCCESS;
}