]> rtime.felk.cvut.cz Git - frescor/fwp.git/commitdiff
Fixes in fwp_manager: memcpy-size arg, msgb->tail setting etc., fwp_mngrtest passed
authorMartin Molnar <molnar@sum.(none)>
Thu, 24 Jan 2008 15:54:12 +0000 (16:54 +0100)
committerMartin Molnar <molnar@sum.(none)>
Thu, 24 Jan 2008 15:54:12 +0000 (16:54 +0100)
fwp/fwp_manager/fwpmgr.c
fwp/libfwp/include/fwp_ctable.h
fwp/libfwp/src/fwp_vres.c

index 5d3c0fc932018928e66a785a245f3a01bd9336f2..51d97e77906afa989a77ac9de0e46240277ebc77 100644 (file)
@@ -73,6 +73,7 @@ void fwp_mngr_admctrl(void *arg)
                        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);      
                        
@@ -85,12 +86,21 @@ void fwp_mngr_negotiate_request(unsigned int hid, struct fwp_msgb *msgb)
 {
 //     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));
@@ -107,6 +117,7 @@ void fwp_mngr_msg_handler(struct fwp_msgb *msgb)
        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: 
@@ -137,16 +148,16 @@ int fwp_agent_negotiate_response(unsigned int hid, struct fwp_msgb *msgb)
        }
 
        /* 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);
        
@@ -174,12 +185,12 @@ void fwp_agent_negotiate_request(unsigned int hid, struct fwp_msgb *msgb)
 
        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);
@@ -245,12 +256,13 @@ int fwp_mngt_init(enum fwp_opmode_t opmode, char *fwp_mngr_addr_s)
 
 
        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);*/
@@ -261,7 +273,7 @@ int fwp_mngt_init(enum fwp_opmode_t opmode, char *fwp_mngr_addr_s)
                }
                
                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");
@@ -293,15 +305,18 @@ struct fwp_msgb* fwp_mngt_input()
        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;
@@ -351,6 +366,7 @@ void fwp_mngr()
                msgb = fwp_mngt_input();
                if (msgb)
                        fwp_mngr_msg_handler(msgb);
+               FWP_DEBUG("Mngr prepare to wait for next msg.\n");
        }
 }
 
@@ -362,6 +378,7 @@ void fwp_agent()
                msgb = fwp_mngt_input();
                if (msgb) 
                        fwp_agent_msg_handler(msgb);
+               FWP_DEBUG("Agent prepare to wait for next msg.\n");
        }
 }
 
index 7f2704f2d33f08f4429a60c3c054d84c488ca7f7..6f0161b35d3a20d905fa7e54f196b3c68e530385 100644 (file)
@@ -15,7 +15,7 @@ enum ctable_entry_status_t {
 struct fwp_ctable_entry {
        unsigned int hid;
        struct fwp_contract contract;
-       struct sockaddr_un saddr;
+       char saddr[30];
        socklen_t addrlen;
        int status;
 };
index 188e29dd6ebe0f4bd2fbbb49448c82d05c143a29..28af82da350c2d56573c19f208cff0a77451c47c 100644 (file)
@@ -71,7 +71,6 @@ int fwp_vres_open(struct fwp_contract *cnt)
                return -ENOMEM;
        }
        
-       fprintf(stderr,"id= %d\n",id);
        vres = &fwp_vres_table[id];
        vres->status = FWP_VRES_OPENED;
        /* release fwp_vres_table mutex */
@@ -83,7 +82,7 @@ int fwp_vres_open(struct fwp_contract *cnt)
        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);
@@ -109,7 +108,7 @@ int fwp_vres_close(unsigned int id)
        
        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,); 
 }
@@ -138,7 +137,7 @@ static void* fwp_vres_tx_thread(void *_vres)
        /*
         * 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) {
@@ -150,8 +149,8 @@ static void* fwp_vres_tx_thread(void *_vres)
                
                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);
                }