]> rtime.felk.cvut.cz Git - frescor/fwp.git/commitdiff
Bugfix in fwp_negotiate_response
authorMartin Molnar <molnar@sum.(none)>
Mon, 28 Jan 2008 11:17:43 +0000 (12:17 +0100)
committerMartin Molnar <molnar@sum.(none)>
Mon, 28 Jan 2008 11:17:43 +0000 (12:17 +0100)
fwp/fwp_manager/Makefile.omk
fwp/fwp_manager/fwpmngr.c [moved from fwp/fwp_manager/fwpmgr.c with 94% similarity]
fwp/libfwp/include/fwp_msgb.h
fwp/libfwp/src/fwp_ctable.c
fwp/libfwp/src/fwp_msgb.c
fwp/tests/fwp_mngrtest/fwp_mngrtest.c

index 2976a8fc3a0a71eb59c783efa024cbf77b10cd0d..86a16f8af795b5b80900de91fbee240595050898 100644 (file)
@@ -1,6 +1,6 @@
-bin_PROGRAMS = fwpman
+bin_PROGRAMS = fwpmngr
 
 CFLAGS = -Wall -D_REENTRANT -g
-fwpman_SOURCES+= fwpmgr.c
+fwpmngr_SOURCES+= fwpmngr.c
 
 lib_LOADLIBES+= fwp pthread rt
similarity index 94%
rename from fwp/fwp_manager/fwpmgr.c
rename to fwp/fwp_manager/fwpmngr.c
index 6dd29a510a2444ffe9b54acfe8f74ee4e9771089..35fc64406d6600d1b3a5189b656c2ef163973407 100644 (file)
@@ -53,12 +53,19 @@ struct fwp_ctable ctable_accepted;
 char buffer[FWP_MTU];
 unsigned int service_vres_id;          /**< id of service vres */
 
+int negotiated =0;
 /***/
 
-void fwp_adm_test(struct fwp_ctable *ct)
+int fwp_adm_test(struct fwp_ctable *ct)
 {
-       
+       if (negotiated >= 2) 
+               return FWP_CNT_REJECTED;
+       else {
+               negotiated++;
+               return FWP_CNT_NEGOTIATED;      
+       }
 }
+
 #if 0
 void fwp_mngr_admctrl(void *arg)
 {
@@ -95,7 +102,8 @@ void fwp_mngr_negotiate_request(unsigned int hid, struct fwp_msgb *msgb)
        fwp_msg_contract_parse(msgb->data, &cnt_req); 
        fwp_msgb_pull(msgb, sizeof(struct fwp_msg_contract));
        /* just for testing */          
-       cnt_req.status = FWP_CNT_NEGOTIATED;
+       //cnt_req.status = fwp_adm_test(&ctable_negotiate);
+       cnt_req.status = fwp_adm_test(&ctable_negotiate);
        
        FWP_DEBUG("Preparing NEGT_RES msg\n");
        
@@ -139,11 +147,11 @@ int fwp_agent_negotiate_response(unsigned int hid, struct fwp_msgb *msgb)
 {
        struct fwp_contract cnt_res;
        struct fwp_ctable_entry *cnt_req;
-       struct fwp_msgb *msgb_res;
        
        fwp_msg_contract_parse(msgb->data, &cnt_res);
        FWP_DEBUG("budget= %d status = %d\n", cnt_res.budget, cnt_res.status);
        cnt_req = fwp_ctable_get(&ctable_negotiate, hid);
+       FWP_DEBUG("budget= %d status = %d\n", cnt_req->contract.budget, cnt_req->contract.status);
 
        if (!cnt_req) /*TODO: test na zhodu res.cnt = req.cnt */
                return -1; /* not valid response*/
@@ -155,16 +163,15 @@ int fwp_agent_negotiate_response(unsigned int hid, struct fwp_msgb *msgb)
 
        /* forward response to app */
        fwp_msgb_push(msgb, sizeof(struct fwp_msg_header));
-       fwp_msg_header_insert(msgb->tail, FWP_NEGT_RES, hid);
+       fwp_msg_header_insert(msgb->data, FWP_NEGT_RES, hid);
 
        msgb->socket = cnt_req->claimer;
-       
        //fwp_ctable_remove(&ctable_negotiate, hid);
        
        /*send response through unix socket */
-       if (sendto(fwp_lsockfd, msgb_res->data, msgb_res->len, 0, 
-                               (struct sockaddr *)msgb_res->socket->addr, 
-                               msgb_res->socket->addrlen) == -1) {
+       if (sendto(fwp_lsockfd, msgb->data, msgb->len, 0, 
+                               (struct sockaddr *)msgb->socket->addr, 
+                               msgb->socket->addrlen) == -1) {
                
        /*      if (errno == EINTR) 
                        continue;*/
@@ -172,6 +179,7 @@ int fwp_agent_negotiate_response(unsigned int hid, struct fwp_msgb *msgb)
        
        }       
        
+       FWP_DEBUG("Response sent to app\n");
        /*fwp_vres_send(service_vres_id, msgb_res);*/
        return 0;
 }
index 4dda7d57e4b9ad4ced1f187cca29ec5a62be921e..45f03e13d733c2235eaa97e288ba83467fe243bb 100644 (file)
@@ -20,6 +20,7 @@ struct fwp_msgb {
        unsigned char *data;            /**< msg data */
        unsigned char *tail;            /**< msg data end*/
        struct fwp_socket *socket;      /**< assigned socket*/
+       int addrshare;                  /*temporal*/
        /*int flags;  MSG_DONTWAIT for async*/
 };
 
index f76c2d0c68526d6f20afc21a92eb09388c05c521..d8f7d3f3d863cb00e7f46197ee33f214e97a4492 100644 (file)
@@ -7,7 +7,8 @@ void fwp_ctable_init(struct fwp_ctable* ctable)
        
        for (i = 0; i < FWP_CONTRACT_MAX; i++)
                ctable->entry[i].status = FWP_CTENTRY_EMPTY;
-
+       
+       ctable->nr_contract = 0;
 }
 
 int fwp_ctable_put(struct fwp_ctable* ctable, struct fwp_ctable_entry* entry)
@@ -26,6 +27,8 @@ int fwp_ctable_put(struct fwp_ctable* ctable, struct fwp_ctable_entry* entry)
        
        memcpy(&ctable->entry[id], entry, sizeof(struct fwp_ctable_entry));
        ctable->entry[id].status = FWP_CTENTRY_FULL;    
+
+       ctable->nr_contract++;
        /* release fwp_contract_table mutex */
        
        return id;
@@ -40,5 +43,6 @@ struct fwp_ctable_entry* fwp_ctable_get(struct fwp_ctable* ctable,
 inline void fwp_ctable_remove(struct fwp_ctable* ctable, unsigned int id)
 {
        ctable->entry[id].status = FWP_CTENTRY_EMPTY;   
+       ctable->nr_contract--;
 }
 
index 332dc835fc0022bcb4fd2745ca094d1a344d7227..ce62e28d8d34b71ccc56c1f7df29e198e1fedeef 100644 (file)
@@ -19,6 +19,8 @@ struct fwp_msgb* fwp_msgb_alloc(size_t buf_size)
        msgb->data = (unsigned char*) msgb + sizeof(struct fwp_msgb);
        msgb->tail = msgb->data;
        msgb->socket = NULL;
+       
+       msgb->addrshare = 0;
 
        return msgb;
 }
index fa08445fcd4486dedc70e54fe0df4a95e5f13835..e15bc6309281306b31e64c301b77fe78f3f340eb 100644 (file)
@@ -25,11 +25,22 @@ int main()
        fwp_init();
        
        rc = fwp_contract_negotiate(&cnt1);
-
        if (cnt1.status == FWP_CNT_NEGOTIATED) {
-               printf("Contract negotiated\n");
+               printf("Contract 1 negotiated\n");
+       } else 
+               printf("Contract 1 rejected.\n");
+       
+       rc = fwp_contract_negotiate(&cnt2);
+       if (cnt2.status == FWP_CNT_NEGOTIATED) {
+               printf("Contract 2 negotiated\n");
+       } else 
+               printf("Contract 2  rejected.\n");
+       
+       rc = fwp_contract_negotiate(&cnt1);
+       if (cnt1.status == FWP_CNT_NEGOTIATED) {
+               printf("Contract 3 negotiated\n");
        } else 
-               printf("Contract rejected.\n");
+               printf("Contract rejected.\n");
 
 //     printf("Contract negotiated\n");