fwp_ctable_put(&ctable_accepted, &ctentry[id]);
msgb->data = msgb->start;
+ /* nstavit response do hlavicky*/
fwp_msgb_put(msgb, sizeof(struct fwp_msg_header));
fwp_msg_contract_put(msgb, &ctentry[id].contract);
{
// struct fwp_ctable_entry ctentry;
struct fwp_contract cnt_req;
+ struct sockaddr_in *addr_in;
fwp_msg_contract_pull(msgb, &cnt_req);
/* just for testing */
cnt_req.status = FWP_NEGOTIATED;
- msgb->data = msgb->start;
+ msgb->tail = msgb->data = msgb->start;
+
+ FWP_DEBUG("Preparing NEGT_RES msg\n");
+ fwp_msg_header_put(msgb, FWP_NEGT_RES, hid);
fwp_msg_contract_put(msgb, &cnt_req);
+
+ /* we have to set UDP port fwp agent is listening on */
+ addr_in = (struct sockaddr_in*) msgb->addr;
+ addr_in->sin_port = htons(FWP_AGENT_UDP_PORT);
+
fwp_vres_send(service_vres_id, msgb);
#if 0
memcpy(&ctentry.contract, &cnt_req, sizeof(cnt_req));
unsigned int code, hid;
fwp_msg_header_pull(msgb, &code, &hid);
+ FWP_DEBUG("code = %d , hid = %d\n", code, hid);
switch (code) {
case FWP_NEGT_REQ:
}
/* forward response to app */
- msgb_res = fwp_msgb_alloc(msgb->len + cnt_req->addrlen);
+ msgb_res = fwp_msgb_alloc(cnt_req->addrlen + msgb->len);
msgb_res->addrlen = cnt_req->addrlen;
msgb_res->len = msgb->len;
msgb_res->addr = msgb_res->start;
- msgb_res->start = msgb_res->data = msgb_res->start + msgb_res->addrlen;
+ msgb_res->start = msgb_res->data = msgb_res->start + cnt_req->addrlen;
msgb_res->tail = msgb_res->start + msgb_res->len;
- memcpy(msgb_res->data, msgb->start, sizeof(msgb_res->len));
- memcpy((void*)msgb_res->addr, (void*)msgb->addr,
- sizeof(msgb->addrlen-1));
+ memcpy(msgb_res->data, msgb->start, msgb_res->len);
+ memcpy((void*)msgb_res->addr, (void*) cnt_req->saddr,
+ cnt_req->addrlen);
//fwp_ctable_remove(&ctable_negotiate, hid);
memcpy(&ctentry.contract, &cnt, sizeof(cnt));
memcpy((void*)&ctentry.saddr, (void*)msgb->addr,
- sizeof(msgb->addrlen));
+ msgb->addrlen);
ctentry.addrlen = msgb->addrlen;
ctentry.hid = hid;
hid = fwp_ctable_put(&ctable_negotiate, &ctentry);
- fwp_agent_negotiate_response(hid, msgb);
+ //fwp_agent_negotiate_response(hid, msgb);
msgb->data = msgb->start;
fwp_msg_header_put(msgb, FWP_NEGT_REQ, hid);
msgb->addrlen = sizeof(fwp_mngr_addr);
case FWP_MANAGER:
+ #if 0
if ((fwp_lsockfd = fwp_create_unix_socket(FWP_AGENT_UNIXPATH,
&fwp_laddr)) < 0) {
return (fwp_lsockfd);
}
-
+ #endif
/*fwp_agent_addr_in.sin_family = AF_INET;
fwp_agent_addr.sin_addr.s_addr = inet_addr(fwp_mngr_addr_s);
fwp_agent_addr.sin_port = htons(FWP_AGENT_UDP_PORT);*/
}
FD_ZERO(&fwp_input_fdset);
- FD_SET(fwp_lsockfd, &fwp_input_fdset);
+ //FD_SET(fwp_lsockfd, &fwp_input_fdset);
FD_SET(fwp_rsockfd, &fwp_input_fdset);
FWP_DEBUG("Manager initialized \n");
socklen_t peer_addrlen;
int len;
struct fwp_msgb *msgb;
-
+ fd_set fdset;
+
+ memcpy(&fdset, &fwp_input_fdset, sizeof(fd_set));
FWP_DEBUG("Waiting for messages\n");
- if (select(getdtablesize()+1, &fwp_input_fdset, (fd_set *)0,
+ if (select(getdtablesize()+1, &fdset, (fd_set *)0,
(fd_set *)0, NULL) < 0){
+
perror("fwp_mngt - error in select");
}
FWP_DEBUG("Management message received\n");
- if (FD_ISSET(fwp_lsockfd, &fwp_input_fdset)){
+ if (FD_ISSET(fwp_lsockfd, &fdset)){
FWP_DEBUG("Management message received from local socket\n");
peer_addrlen = sizeof(peer_addr_un);
peer_addr = (struct sockaddr*)&peer_addr_un;
msgb = fwp_mngt_input();
if (msgb)
fwp_mngr_msg_handler(msgb);
+ FWP_DEBUG("Mngr prepare to wait for next msg.\n");
}
}
msgb = fwp_mngt_input();
if (msgb)
fwp_agent_msg_handler(msgb);
+ FWP_DEBUG("Agent prepare to wait for next msg.\n");
}
}
return -ENOMEM;
}
- fprintf(stderr,"id= %d\n",id);
vres = &fwp_vres_table[id];
vres->status = FWP_VRES_OPENED;
/* release fwp_vres_table mutex */
if ((rc = fwp_ac_open(vres->contract.ac_id)) < 0) {
return rc;
}
- printf("rc = %d \n", rc);
+
pthread_attr_init(&vres->tx_thread_attr);
rc = pthread_create(&vres->tx_thread, &vres->tx_thread_attr,
fwp_vres_tx_thread, (void*) vres);
vres->status = FWP_VRES_CLOSED;
- printf("close rc = %d\n",rc);
+ FWP_DEBUG("Vres id %d closed.\n", id);
return 0;
//TODO: pthread_cancel(vres->tx_thread,);
}
/*
* block_signals();
*/
- printf("Thread: budget:%d period_usec= %d\n",
+ FWP_DEBUG("vres tx thread with budget:%d period_usec = %d started.\n",
vres->contract.budget, vres->contract.period_usec);
while (1) {
if (msgb) {
/* TODO: rc handling */
- printf("Posilam\n");
rc = fwp_ac_send(ac_id, msgb);
+ FWP_DEBUG("Message sent through AC %d\n",ac_id);
//fwp_msgb_free(msgb);
}