if (ctentry[id].contract.status == FWP_NEGOTIATED )
fwp_ctable_put(&ctable_accepted, &ctentry[id]);
- msgb->data = msgb->head;
+ msgb->data = msgb->start;
fwp_msgb_put(msgb, sizeof(struct fwp_msg_header));
fwp_msg_contract_put(msgb, &ctentry[id].contract);
ctentry.hid = hid;
hid = fwp_ctable_put(&ctable_negotiate, &ctentry);
- msgb->data = msgb->head;
+ msgb->data = msgb->start;
fwp_msg_header_put(msgb, FWP_NEGT_REQ, hid);
msgb->addrlen = sizeof(fwp_mngr_addr);
memcpy(&msgb->addr, (struct sockaddr*)&fwp_mngr_addr, msgb->addrlen);
msgb = fwp_msgb_alloc(len);
memcpy(&msgb->addr, (struct sockaddr*)&peer_addr, peer_addrlen);
msgb->addrlen = peer_addrlen;
- memcpy(msgb->head, buffer, len);
+ memcpy(msgb->start, buffer, len);
msgb->len = len;
if (mode == FWP_AGENT)
{
/*if (!msgb)
return -EINVAL;*/
- while (sendto(fwp_ac_table[id].sockfd, msgb->head, msgb->len,
- /*msgb_>flags*/0, &msgb->addr, msgb->addrlen) < 0) {
+ while (sendto(fwp_ac_table[id].sockfd, msgb->start, msgb->len,
+ /*msgb_>flags*/0, (struct sockaddr*)msgb->addr,
+ msgb->addrlen) < 0) {
if (errno == EINTR) continue;
perror("fwp_ac_send - Error while sending data");
/*fwp_msgb_pool_dequeue; other choice*/
msgb = (struct fwp_msgb*) malloc(sizeof(struct fwp_msgb) + buf_size);
- msgb->head = (unsigned char*) msgb + sizeof(struct fwp_msgb);
- msgb->data = msgb->tail = msgb->head;
+ if (!msgb)
+ return NULL;
+
msgb->buf_size = buf_size;
+ msgb->start = (unsigned char*) msgb + sizeof(struct fwp_msgb);
+ msgb->data = msgb->tail = msgb->start;
msgb->len = 0;
+ msgb->addr = NULL;
+ msgb->addrlen = 0;
return msgb;
}
-void fwp_msgb_free(struct fwp_msgb* msgb)
+void fwp_msgb_free(struct fwp_msgb *msgb)
{
free((void*) msgb);
msgb = NULL;
struct sockaddr_in fwp_mngr_addr;
struct sockaddr_un fwp_agent_addr;
-int sockfd_agent;
-int sockfd_mngr;
+int sockfd_agent;
+int sockfd_mngr;
int fwp_init()
return len;
}
-
int fwp_send(unsigned int vres_id, void *buffer, size_t size, int flags,
struct sockaddr *to, socklen_t tolen)
{
/*if (flags && MSG_DONTWAIT)
msgb = fwp_msgb_alloc(buffer_size);
else {*/
- if (!(msgb = fwp_msgb_alloc(0)))
+ if (!(msgb = fwp_msgb_alloc(tolen)))
return -ENOMEM;
- msgb->head = msgb->data = buffer;
- msgb->tail = msgb->head + size;
- msgb->buf_size = msgb->len = size;
+ msgb->buf_size = msgb->addrlen = tolen;
+ msgb->addr = msgb->start;
+ msgb->start = msgb->data = buffer;
+ msgb->tail = msgb->start + size;
+ msgb->len = size;
/*}*/
- memcpy((void*)&msgb->addr, (void*)to, tolen);
+ memcpy((void*)msgb->addr, (void*)to, tolen);
msgb->addrlen = tolen;
return fwp_vres_send(vres_id, msgb);
msgb = fwp_msgb_alloc(sizeof(struct fwp_msg_header) +
sizeof(struct fwp_msg_contract));
- if (msgb == NULL) return -1;
+ if (!msgb)
+ return -ENOMEM;
fwp_msg_header_put(msgb, FWP_NEGT_REQ, 0);
fwp_msg_contract_put(msgb, contract);
- /*sendto FWP agent through unix socket
+ /* sendto FWP agent through unix socket
* and wait for reply
*/
- msgb->addrlen = sizeof(fwp_agent_addr);
- memcpy((void*)&msgb->addr, (void*)&fwp_agent_addr, msgb->addrlen);
-
- /*fwp_vres_send(vres_id, msgb);*/
-
connect(sockfd_agent, (struct sockaddr *)&fwp_agent_addr,
sizeof(fwp_agent_addr));
- send(sockfd_agent, msgb->head, msgb->len, 0);
- recv(sockfd_agent, msgb->head, msgb->buf_size, 0);
+ send(sockfd_agent, msgb->start, msgb->len, 0);
+ recv(sockfd_agent, msgb->start, msgb->buf_size, 0);
fwp_msg_header_pull(msgb, &code, &hid);
fwp_msg_contract_pull(msgb, contract);