root/vtcross/trunk/src/policy_engines/PolicyEngine.cpp @ 181

Revision 181, 3.3 KB (checked in by bhilburn, 15 years ago)

Implemented a more standard way of registering/deregistering components and
engines.

Line 
1/* Virginia Tech Cognitive Radio Open Source Systems
2 * Virginia Tech, 2009
3 *
4 * LICENSE INFORMATION GOES HERE
5 */
6
7/* DESCRIPTION OF FILE.
8 */
9
10
11#include <cstdlib>
12#include <cstring>
13#include <stdint.h>
14
15#include "vtcross/common.h"
16#include "vtcross/components.h"
17#include "vtcross/containers.h"
18#include "vtcross/debug.h"
19#include "vtcross/error.h"
20#include "vtcross/socketcomm.h"
21
22
23PolicyEngine::PolicyEngine()
24{
25    LOG("Creating Policy Engine.\n");
26    SML = NULL;
27    LoadPolicies();
28}
29
30
31PolicyEngine::~PolicyEngine()
32{
33    if(SML)
34        delete SML;
35}
36
37
38PolicyEngine::PolicyEngine(const char* serverName, const char* portNumber)
39{
40    LOG("Creating Policy Engine.\n");
41
42    SML = new SML_Info;
43    SML->hostname = std::string(serverName);
44    SML->port = std::string(portNumber);
45
46    SML->socketFD = ClientSocket(serverName, portNumber);
47    RegisterServices(SML->socketFD);
48
49    LOG("Policy Engine connected to SML at %s.\n", serverName);
50
51    LoadPolicies();
52}
53
54
55void
56PolicyEngine::GetRemoteComponentType(int32_t socketFD)
57{
58}
59
60
61void
62PolicyEngine::WaitForSignal(int32_t socketFD)
63{
64    LOG("Policy Engine:: Waiting for Policy Check Request.\n");
65
66    int32_t decision_array[10];
67    struct Parameter pList[10];
68    struct CE_Info ce_info;
69
70    // TODO should this be a GetRequest call or something else?
71    if(GetRequest(socketFD, pList, &ce_info)) {
72        LOG("Policy Engine:: Validating Transmission Parameters.\n");
73        ValidateParameters(pList, &ce_info, decision_array);   
74
75        LOG("Policy Engine:: Sending Policy decision to Server.\n");
76        SendPEDecision(socketFD, pList, &ce_info, decision_array);
77    }
78}
79
80
81void
82PolicyEngine::Shutdown()
83{
84}
85
86
87void
88PolicyEngine::Reset()
89{
90}
91
92
93void
94PolicyEngine::RegisterComponent(int32_t socketFD)
95{
96    SendMessage(socketFD, "register_engine_policy");
97    LOG("Policy Engine:: Registration message sent.\n");
98
99}
100
101
102void
103PolicyEngine::DeregisterComponent(int32_t socketFD)
104{
105}
106
107
108void
109PolicyEngine::RegisterServices(int32_t socketFD)
110{
111    LOG("Policy Engine:: Registering services.\n");
112    SendMessage(socketFD, "register_service_pe_geo");
113    SendMessage(socketFD, "register_service_pe_time");
114    SendMessage(socketFD, "register_service_pe_spectrum");
115    SendMessage(socketFD, "register_service_pe_spacial");
116}
117
118
119void
120PolicyEngine::DeregisterServices(int32_t socketFD)
121{
122    LOG("Policy Engine:: Deregistering services.\n");
123    SendMessage(socketFD, "deregister_service_pe_geo");
124    SendMessage(socketFD, "deregister_service_pe_time");
125    SendMessage(socketFD, "deregister_service_pe_spectrum");
126    SendMessage(socketFD, "deregister_service_pe_spacial");
127}
128
129
130void
131PolicyEngine::LoadPolicies()
132{
133    LOG("PolicyEngine:: Loading policies.\n");
134}
135
136
137void
138PolicyEngine::ReloadPolicies()
139{
140}
141
142
143void
144PolicyEngine::SendPEDecision(int32_t socketFD, struct Parameter pList[], \
145        struct CE_Info *ce_info, int32_t decision_array[])
146{
147    char var[50];
148 
149    for (size_t i = 0; i < ce_info->numParameters; i++) {
150        sprintf(var, "%i", decision_array[i]);
151        SendMessage(socketFD, var);
152    }
153}
154
155
156void
157PolicyEngine::ValidateParameters(struct Parameter pList[], \
158        struct CE_Info *ce_info, int decision_array[])
159{
160    LOG("Policy Engine:: Policies Validated.\n");
161    for (size_t i = 0; i < ce_info->numParameters; i++)
162        decision_array[i] = 1;
163}
164
Note: See TracBrowser for help on using the browser.