Example #1
0
void secure_channel_setup(jnx_hashmap *config) {
	JNX_LOG(DEFAULT_CONTEXT,"Starting secure socket channel...\n");
	configuration = config;
	char *sport = jnx_hash_get(configuration,"SECUREPORT");
	JNXCHECK(sport);
	secure_socket = jnx_socket_tcp_create(AF_INET);
	ASYNC_START(secure_listener_start,sport);
}
Example #2
0
size_t secure_channel_send(session *s, char *message, size_t msg_len) {
	
	if(s->current_state != SESSION_CONNECTED) {
		jnx_term_printf_in_color(JNX_COL_RED,"Unable to send message with session\n");
		return -1;
	}
	jnx_socket *sec = jnx_socket_tcp_create(AF_INET);
	
	JNX_LOG(DEFAULT_CONTEXT,"encrypting \n%s\nwith %s\n",message,s->shared_secret);
	char *buffer = des_encrypt(s->shared_secret,message,msg_len);
    if(strcmp(jnx_hash_get(configuration,"DEBUG"),"YES") == 0) {
        jnx_socket_tcp_send(sec,"localhost",s->foriegn_peer->secure_port,buffer,strlen(buffer));
    } else {
        jnx_socket_tcp_send(sec,s->foriegn_peer->ip,s->foriegn_peer->secure_port,buffer,strlen(buffer));
    }

	free(buffer);
	jnx_socket_destroy(&sec);
}
Example #3
0
jnx_tcp_listener* jnx_socket_tcp_listener_create(jnx_char *port,
    jnx_unsigned_int family, jnx_int max_connections) {
  JNXCHECK(max_connections <= 200);
  struct addrinfo hints;
  struct addrinfo *result, *rp;
  jnx_int on = 1,s;
  jnx_tcp_listener *l = malloc(sizeof(jnx_tcp_listener));
  l->socket = jnx_socket_tcp_create(family);
  l->hint_exit = 0;
  memset (&hints, 0, sizeof (struct addrinfo));
  hints.ai_family = family;
  hints.ai_socktype = l->socket->stype;
  hints.ai_flags = AI_PASSIVE;
  s = getaddrinfo (NULL, port, &hints, &result);
  if (s != 0)
  {
    fprintf (stderr, "getaddrinfo: %s\n", gai_strerror (s));
    JNXFAIL("getaddrinfo failure");  
  }
  s = ioctl(l->socket->socket,FIONBIO,(char*)&on);
  for (rp = result; rp != NULL; rp = rp->ai_next)
  {
    JNXCHECK(s == 0);
    s = bind (l->socket->socket, rp->ai_addr, rp->ai_addrlen);
    if (s == 0)
    {
      break;
    }
    jnx_socket_tcp_listener_destroy(&l);
    JNXFAIL("bind failure");
  }
  JNXCHECK(l->socket->socket);
  s = listen(l->socket->socket,max_connections);
  JNXCHECK(s == 0);
  l->ufds[0].fd = l->socket->socket;
  l->ufds[0].events = POLLIN;
  l->poll_timeout = 500;
  l->nfds = 1;
  return l;
}
Example #4
0
size_t jnx_http_request(JNX_HTTP_TYPE type, 
    const jnx_char *hostname, 
    const jnx_char *page, jnx_char *args, jnx_uint8 **out_reply,jnx_size *out_len) {
  JNXCHECK(hostname);
  JNXCHECK(page);
  JNXCHECK(type == JNX_HTTP_POST || type == JNX_HTTP_GET);
  jnx_char *verb = NULL;
  jnx_char *out_ip;

  switch(type) {
    case JNX_HTTP_POST:
      verb = "POST";
      break;
    case JNX_HTTP_GET:
      verb = "GET";
      break;
  }
  JNXCHECK(verb);
  jnx_unsigned_int out_family;
  jnx_int32 ret = jnx_network_hostname_to_ip(AF_INET,(jnx_char*)hostname,&out_ip,&out_family);
  JNXCHECK(ret == 0);
  jnx_socket *sock = jnx_socket_tcp_create(out_family);
  JNXCHECK(sock);
  jnx_char sendbuffer[2048];
  snprintf(sendbuffer,sizeof(sendbuffer), 
      "%s %s HTTP/1.0\r\n"
      "Host: %s\r\n"
      "Content-type: application/x-www-form-urlencoded\r\n"
      "Content-length: %zu\r\n\r\n"
      "%s\r\n",verb, page, hostname, strlen(args),args);

  jnx_size l = jnx_socket_tcp_send_with_receipt(sock,
      (jnx_char*)hostname,"80",(jnx_uint8*)sendbuffer,
      (jnx_size)strlen(sendbuffer),out_reply);
  *out_len = l;  
  if(!l) {
    return JNX_HTTP_STATE_UNKNOWN;
  }
  return JNX_HTTP_STATE_OKAY;
}