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)
{
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");
{
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*/
/* 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;*/
}
+ FWP_DEBUG("Response sent to app\n");
/*fwp_vres_send(service_vres_id, msgb_res);*/
return 0;
}
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)
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;
inline void fwp_ctable_remove(struct fwp_ctable* ctable, unsigned int id)
{
ctable->entry[id].status = FWP_CTENTRY_EMPTY;
+ ctable->nr_contract--;
}
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 3 rejected.\n");
// printf("Contract negotiated\n");