コード例 #1
0
ファイル: Client.cpp プロジェクト: gogo-dev/GoGo
void Client::on_payload(uint8_t* p, uint16_t payloadSize, bool encrypted, system::error_code err, size_t bytesTransferred)
{
	unused_parameter(bytesTransferred);

	PacketAllocator::auto_free f(packetPool, p);

	if(err)
		return disconnect("Failure in recv(Payload).");

	if(payloadSize < PayloadHeader::SIZE)
		Transmitter::disconnect(format("Invalid payload size of %2% bytes detected.") % payloadSize);

	// If this gets triggered, boost is f*****g up and we need to read the docs some more.
	assert(bytesTransferred == payloadSize);

	PayloadHeader payload = extract_payload(p, encrypted, cryptoKey.c_array());
	uint16_t paramLength = payloadSize - Client::PayloadHeader::SIZE;	// LOL.
	uint8_t* params = p + Client::PayloadHeader::SIZE;

	if(encrypted)
		decrypt_params(params, paramLength, cryptoKey.c_array());

	registry.dispatch(payload.commandID, params, paramLength);

	// This begins the recieving loop again!
	recieve_packet_header();
}
コード例 #2
0
//(author:cylin)===============================================================
void sc_h264d_top::call_nb_transport_bw()
{
  if(dbg_info) std::cout<<sc_core::sc_time_stamp()<<"\tH264.call_nb_bw.next_phase: \t"<<next_phase<<std::endl;
  switch(next_phase)
  {
    case tlm::END_REQ:
    {
      delay = SC_ZERO_TIME;
      cur_phase = next_phase;
      return_sync_enum = target_socket->nb_transport_bw(*payload_ptr, cur_phase, delay);
      if(return_sync_enum != tlm::TLM_ACCEPTED){
        std::cout<<sc_core::sc_time_stamp()<<"\tH264.call_nb_bw.return error: \t"<<return_sync_enum <<std::endl;
        sc_stop();
      }
      //next transfer
      next_phase = tlm::BEGIN_RESP;
      if(payload_ptr->get_command() == tlm::TLM_WRITE_COMMAND){
        event_call_nb_bw.notify(write_response_delay+delay);
      }
      else{
        event_call_nb_bw.notify(read_response_delay+delay);
      }
      break;
    }
    case tlm::BEGIN_RESP:
    {
      //extract payload
      extract_payload();
      //payload_ptr->set_response_status(tlm::TLM_OK_RESPONSE);
      //---------------
      delay = SC_ZERO_TIME;
      cur_phase = next_phase;
      return_sync_enum = target_socket->nb_transport_bw(*payload_ptr, cur_phase, delay);
      if(return_sync_enum != tlm::TLM_ACCEPTED){
        std::cout<<sc_core::sc_time_stamp()<<"\tH264.call_nb_bw.return error: \t"<<return_sync_enum <<std::endl;
        sc_stop();
      }      
      break;
    }
    default:
    break;
  }//end switch
}
コード例 #3
0
//=============================================================================
//                               b_transport
//(author:cylin)===============================================================
void                                        
sc_h264d_top::b_transport
( tlm::tlm_generic_payload  &payload                // ref to  Generic Payload 
, sc_core::sc_time          &time             // delay time 
)
{
  //Extract Payload
  payload_ptr = &payload;
  //extract_payload();  
    
  if(payload_ptr->get_command() == tlm::TLM_WRITE_COMMAND)
    time = time + accept_delay + write_response_delay;
  else
    time = time + accept_delay + read_response_delay;
  
  wait(time);
  time = SC_ZERO_TIME;
  
  extract_payload();    
  return;     
}
コード例 #4
0
ファイル: SocketLib.c プロジェクト: madhavPdesai/ahir
//
// will establish a connection, send the
// packet and block till a response is obtained.
// socket will be closed after the response
// is obtained..
//
// the buffer is used for the sent as well
// as the received data.
//
void send_packet_and_wait_for_response(char* buffer, int send_len, char* server_host_address, int server_port_number)
{
  int sockfd, n;
  struct sockaddr_in serv_addr;
  struct hostent *server;
  
  sockfd = socket(AF_INET, SOCK_STREAM, 0);
  if (sockfd < 0)
    {
      fprintf(stderr,"Error: could not open client socket\n");
      return;
    }
  
  server = gethostbyname(server_host_address);
  if (server == NULL) 
    {
      fprintf(stderr, "Error: server host %s not found..\n",server_host_address);
      close(sockfd);
      sockfd = -1;
    }
  else
    {
      bzero((char *) &serv_addr, sizeof(serv_addr));
      serv_addr.sin_family = AF_INET;
      bcopy((char *)server->h_addr,(char *) &serv_addr.sin_addr.s_addr,server->h_length);
      serv_addr.sin_port = htons(server_port_number);

#ifdef DEBUG
      fprintf(stderr, "Info: connecting to server %s on port %d .......... \n",
	      server_host_address,
	      server_port_number);
#endif

      n =-1;

      while(n == -1)
      {
#ifdef USE_GNUPTH
	n=pth_connect(sockfd,(struct sockaddr*) &serv_addr,sizeof(serv_addr));
#else
	n=connect(sockfd,(struct sockaddr*) &serv_addr,sizeof(serv_addr));
#endif
      }
      
#ifdef DEBUG
      fprintf(stderr, "Info: successfully connected to server %s on port %d .......... \n",
	      server_host_address,
	      server_port_number);
#endif


      while(1)
	{
	  if(can_write_to_socket(sockfd))
	    break;

	  __SLEEP__(1000);
	}

#ifdef USE_GNUPTH
      pth_send(sockfd,buffer,send_len,0);
#else
      send(sockfd,buffer,send_len,0);
#endif

#ifdef DEBUG
      char payload[4096];
      int pl = extract_payload(buffer,payload,send_len);
      fprintf(stderr, "Info: sent message %s to server (payload of %d bytes)\n", buffer, pl);
      if(pl > 0)
	print_payload(stderr,payload,8,pl);
#endif
      while( (n = receive_string(sockfd,buffer, MAX_BUF_SIZE)) <= 0)
	{
		__SLEEP__(1000);
	}
	  
#ifdef DEBUG
      fprintf(stderr, "Info: received message %s from server\n", buffer);	  
      print_payload(stderr,buffer,8,n);
#endif
      close(sockfd);
    }
}