summaryrefslogtreecommitdiff
path: root/src/lib/ipcp.c
diff options
context:
space:
mode:
authorDimitri Staessens <dimitri.staessens@intec.ugent.be>2016-03-29 12:06:58 +0200
committerDimitri Staessens <dimitri.staessens@intec.ugent.be>2016-03-29 12:06:58 +0200
commit1d4442e472d20f261986089ea468daa93631d1f4 (patch)
tree3b27a134c762190b096de421310a50910dca4a34 /src/lib/ipcp.c
parente5d67f7d4df123c2490201447681f2efd553dcc1 (diff)
parent37c4ccaf59a0406053573e14909be48322ffb084 (diff)
downloadouroboros-1d4442e472d20f261986089ea468daa93631d1f4.tar.gz
ouroboros-1d4442e472d20f261986089ea468daa93631d1f4.zip
Merged in sandervrijders/ouroboros/be-gpb (pull request #45)
Replace custom ser/des with GPB
Diffstat (limited to 'src/lib/ipcp.c')
-rw-r--r--src/lib/ipcp.c94
1 files changed, 56 insertions, 38 deletions
diff --git a/src/lib/ipcp.c b/src/lib/ipcp.c
index 53d717ba..445160f0 100644
--- a/src/lib/ipcp.c
+++ b/src/lib/ipcp.c
@@ -40,10 +40,10 @@
#include <sys/wait.h>
static int send_ipcp_msg(pid_t pid,
- struct ipcp_msg * msg)
+ ipcp_msg_t * msg)
{
int sockfd = 0;
- buffer_t * buf = NULL;
+ buffer_t buf;
char * sock_path;
sock_path = ipcp_sock_path(pid);
@@ -56,24 +56,31 @@ static int send_ipcp_msg(pid_t pid,
return -1;
}
- buf = serialize_ipcp_msg(msg);
- if (buf == NULL) {
- free(sock_path);
+ buf.size = ipcp_msg__get_packed_size(msg);
+ if (buf.size == 0) {
close(sockfd);
+ free(sock_path);
return -1;
}
- if (write(sockfd, buf->data, buf->size) == -1) {
+ buf.data = malloc(buf.size);
+ if (buf.data == NULL) {
+ close(sockfd);
+ free(sock_path);
+ return -ENOMEM;
+ }
+
+ ipcp_msg__pack(msg, buf.data);
+
+ if (write(sockfd, buf.data, buf.size) == -1) {
free(sock_path);
- free(buf->data);
- free(buf);
+ free(buf.data);
close(sockfd);
return -1;
}
- free(buf->data);
- free(buf);
-
+ free(buf.data);
+ free(sock_path);
close(sockfd);
return 0;
}
@@ -158,14 +165,16 @@ int ipcp_reg(pid_t pid,
char ** difs,
size_t difs_size)
{
- struct ipcp_msg msg;
+ ipcp_msg_t msg = IPCP_MSG__INIT;
- if (difs == NULL)
- return -1;
+ if (difs == NULL ||
+ difs_size == 0 ||
+ difs[0] == NULL)
+ return -EINVAL;
- msg.code = IPCP_REG;
- msg.difs = difs;
- msg.difs_size = difs_size;
+ msg.code = IPCP_MSG_CODE__IPCP_REG;
+ msg.dif_name = difs;
+ msg.n_dif_name = difs_size;
if (send_ipcp_msg(pid, &msg)) {
LOG_ERR("Failed to send message to daemon");
@@ -179,14 +188,16 @@ int ipcp_unreg(pid_t pid,
char ** difs,
size_t difs_size)
{
- struct ipcp_msg msg;
+ ipcp_msg_t msg = IPCP_MSG__INIT;
- if (difs == NULL)
- return -1;
+ if (difs == NULL ||
+ difs_size == 0 ||
+ difs[0] == NULL)
+ return -EINVAL;
- msg.code = IPCP_UNREG;
- msg.difs = difs;
- msg.difs_size = difs_size;
+ msg.code = IPCP_MSG_CODE__IPCP_UNREG;
+ msg.dif_name = difs;
+ msg.n_dif_name = difs_size;
if (send_ipcp_msg(pid, &msg)) {
LOG_ERR("Failed to send message to daemon");
@@ -197,12 +208,11 @@ int ipcp_unreg(pid_t pid,
}
int ipcp_bootstrap(pid_t pid,
- struct dif_config conf)
+ struct dif_config * conf)
{
- struct ipcp_msg msg;
+ ipcp_msg_t msg = IPCP_MSG__INIT;
- msg.code = IPCP_BOOTSTRAP;
- msg.conf = &conf;
+ msg.code = IPCP_MSG_CODE__IPCP_BOOTSTRAP;
if (send_ipcp_msg(pid, &msg)) {
LOG_ERR("Failed to send message to daemon");
@@ -218,24 +228,32 @@ int ipcp_enroll(pid_t pid,
char ** n_1_difs,
ssize_t n_1_difs_size)
{
- struct ipcp_msg msg;
-
- if (n_1_difs == NULL)
- return -1;
-
- if (dif_name == NULL)
+ ipcp_msg_t msg = IPCP_MSG__INIT;
+
+ if (n_1_difs == NULL ||
+ n_1_difs_size == 0 ||
+ n_1_difs[0] == NULL ||
+ dif_name == NULL ||
+ member_name == NULL)
+ return -EINVAL;
+
+ msg.code = IPCP_MSG_CODE__IPCP_ENROLL;
+ msg.dif_name = malloc(sizeof(*(msg.dif_name)));
+ if (msg.dif_name == NULL) {
+ LOG_ERR("Failed to malloc");
return -1;
-
- msg.code = IPCP_ENROLL;
- msg.dif_name = dif_name;
+ }
+ msg.dif_name[0] = dif_name;
msg.ap_name = member_name;
- msg.difs = n_1_difs;
- msg.difs_size = n_1_difs_size;
+ msg.n_1_dif_name = n_1_difs;
+ msg.n_n_1_dif_name = n_1_difs_size;
if (send_ipcp_msg(pid, &msg)) {
LOG_ERR("Failed to send message to daemon");
+ free(msg.dif_name);
return -1;
}
+ free(msg.dif_name);
return 0;
}