Added code to send messages back to clients (untested)
This commit is contained in:
parent
82ead01089
commit
1ee2e1e8b9
|
@ -361,8 +361,31 @@ static void _destroy_server(TCP * tcp)
|
||||||
static int _tcp_client_send(TCP * tcp, AppTransportClient * client,
|
static int _tcp_client_send(TCP * tcp, AppTransportClient * client,
|
||||||
AppMessage * message)
|
AppMessage * message)
|
||||||
{
|
{
|
||||||
/* FIXME implement */
|
size_t i;
|
||||||
return -1;
|
TCPSocket * s;
|
||||||
|
Buffer * buffer;
|
||||||
|
|
||||||
|
if(tcp->mode != ATM_SERVER)
|
||||||
|
return -error_set_code(1, "%s", "Not a server");
|
||||||
|
/* lookup the client */
|
||||||
|
for(i = 0; i < tcp->u.server.clients_cnt; i++)
|
||||||
|
{
|
||||||
|
s = tcp->u.server.clients[i];
|
||||||
|
if(s->client == client)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if(i == tcp->u.server.clients_cnt)
|
||||||
|
return -error_set_code(1, "%s", "Unknown client");
|
||||||
|
/* send the message */
|
||||||
|
if((buffer = buffer_new(0, NULL)) == NULL)
|
||||||
|
return -1;
|
||||||
|
if(appmessage_serialize(message, buffer) != 0
|
||||||
|
|| _tcp_socket_queue(s, buffer) != 0)
|
||||||
|
{
|
||||||
|
buffer_delete(buffer);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -373,6 +396,7 @@ static int _tcp_send(TCP * tcp, AppMessage * message)
|
||||||
|
|
||||||
if(tcp->mode != ATM_CLIENT)
|
if(tcp->mode != ATM_CLIENT)
|
||||||
return -error_set_code(1, "%s", "Not a client");
|
return -error_set_code(1, "%s", "Not a client");
|
||||||
|
/* send the message */
|
||||||
if((buffer = buffer_new(0, NULL)) == NULL)
|
if((buffer = buffer_new(0, NULL)) == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
if(appmessage_serialize(message, buffer) != 0
|
if(appmessage_serialize(message, buffer) != 0
|
||||||
|
|
|
@ -162,7 +162,8 @@ static UDP * _udp_init(AppTransportPluginHelper * helper,
|
||||||
res = _init_server(udp, name);
|
res = _init_server(udp, name);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
res = -error_set_code(1, "Unknown transport mode");
|
res = -error_set_code(1, "%s",
|
||||||
|
"Unknown transport mode");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
/* check for errors */
|
/* check for errors */
|
||||||
|
@ -292,8 +293,45 @@ static void _destroy_server(UDP * udp)
|
||||||
static int _udp_client_send(UDP * udp, AppTransportClient * client,
|
static int _udp_client_send(UDP * udp, AppTransportClient * client,
|
||||||
AppMessage * message)
|
AppMessage * message)
|
||||||
{
|
{
|
||||||
/* FIXME implement */
|
int ret;
|
||||||
return -1;
|
size_t i;
|
||||||
|
UDPClient * c;
|
||||||
|
Buffer * buffer;
|
||||||
|
|
||||||
|
/* lookup the client */
|
||||||
|
for(i = 0; i < udp->u.server.clients_cnt; i++)
|
||||||
|
{
|
||||||
|
c = udp->u.server.clients[i];
|
||||||
|
if(c->client == client)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if(i == udp->u.server.clients_cnt)
|
||||||
|
return -error_set_code(1, "%s", "Unknown client");
|
||||||
|
/* send the message */
|
||||||
|
if((buffer = buffer_new(0, NULL)) == NULL)
|
||||||
|
return -1;
|
||||||
|
if(appmessage_serialize(message, buffer) != 0)
|
||||||
|
{
|
||||||
|
buffer_delete(buffer);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
#ifdef DEBUG
|
||||||
|
if(udp->aip->ai_family == AF_INET)
|
||||||
|
{
|
||||||
|
sa = (struct sockaddr_in *)udp->aip->ai_addr;
|
||||||
|
fprintf(stderr, "DEBUG: %s() %s (%s:%u) size=%lu\n", __func__,
|
||||||
|
"sendto()", inet_ntoa(sa->sin_addr),
|
||||||
|
ntohs(sa->sin_port), buffer_get_size(buffer));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
fprintf(stderr, "DEBUG: %s() %s family=%d size=%lu\n", __func__,
|
||||||
|
"sendto()", udp->aip->ai_family,
|
||||||
|
buffer_get_size(buffer));
|
||||||
|
#endif
|
||||||
|
ret = sendto(udp->fd, buffer_get_data(buffer), buffer_get_size(buffer),
|
||||||
|
0, c->sa, c->sa_len);
|
||||||
|
buffer_delete(buffer);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -308,7 +346,7 @@ static int _udp_send(UDP * udp, AppMessage * message)
|
||||||
|
|
||||||
if(udp->mode != ATM_CLIENT)
|
if(udp->mode != ATM_CLIENT)
|
||||||
return -error_set_code(1, "%s", "Not a client");
|
return -error_set_code(1, "%s", "Not a client");
|
||||||
/* FIXME confirm the message will be consistent and readable */
|
/* send the message */
|
||||||
if((buffer = buffer_new(0, NULL)) == NULL)
|
if((buffer = buffer_new(0, NULL)) == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
if(appmessage_serialize(message, buffer) != 0)
|
if(appmessage_serialize(message, buffer) != 0)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user