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

Revision 186, 3.9 KB (checked in by bhilburn, 15 years ago)

Made the remotecomponent struct public since information hiding doesn't
make any sense here, removed unneeded info from it, worked on a couple
of policy engine functions to be smart about start-up connections.

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_present = false;
27    control = new RemoteComponent;
28    LoadPolicies();
29}
30
31
32PolicyEngine::~PolicyEngine()
33{
34    delete control;
35}
36
37
38PolicyEngine::PolicyEngine(const char* serverName, const char* portNumber, \
39        const bool SML)
40{
41    LOG("Creating Policy Engine.\n");
42
43    SML_present = SML;
44    control = new RemoteComponent;
45    control->serverName = std::string(serverName);
46    control->serverPort = atoi(portNumber);
47
48    control->socketFD = ClientSocket(serverName, portNumber);
49
50    if(SML_present) {
51        RegisterServices(control->socketFD);
52        LOG("Policy Engine connected to SML at %s.\n", serverName);
53    }
54    else {
55        RegisterComponent(control->socketFD);
56        LOG("Policy Engine connected to shell at %s.\n", serverName);
57    }
58
59    LoadPolicies();
60}
61
62
63void
64PolicyEngine::GetRemoteComponentType(int32_t socketFD)
65{
66}
67
68
69void
70PolicyEngine::WaitForSignal(int32_t socketFD)
71{
72    LOG("Policy Engine:: Waiting for Policy Check Request.\n");
73
74    int32_t decision_array[10];
75    struct Parameter pList[10];
76    struct CE_Info ce_info;
77
78    // TODO should this be a GetRequest call or something else?
79    if(GetRequest(socketFD, pList, &ce_info)) {
80        LOG("Policy Engine:: Validating Transmission Parameters.\n");
81        ValidateParameters(pList, &ce_info, decision_array);   
82
83        LOG("Policy Engine:: Sending Policy decision to Server.\n");
84        SendPEDecision(socketFD, pList, &ce_info, decision_array);
85    }
86}
87
88
89void
90PolicyEngine::Shutdown()
91{
92    if(SML_present)
93        DeregisterServices(control->socketFD);
94    else
95        DeregisterComponent(control->socketFD);
96}
97
98
99void
100PolicyEngine::Reset()
101{
102    LOG("Resetting Policy Engine.\n");
103    SML_present = false;
104    control = new RemoteComponent;
105    LoadPolicies();
106}
107
108
109void
110PolicyEngine::RegisterComponent(int32_t socketFD)
111{
112    SendMessage(socketFD, "register_engine_policy");
113    LOG("Policy Engine:: Registration message sent.\n");
114
115}
116
117
118void
119PolicyEngine::DeregisterComponent(int32_t socketFD)
120{
121    SendMessage(socketFD, "deregister_engine_policy");
122    LOG("Policy Engine:: Registration message sent.\n");
123}
124
125
126void
127PolicyEngine::RegisterServices(int32_t socketFD)
128{
129    LOG("Policy Engine:: Registering services.\n");
130    SendMessage(socketFD, "register_service_pe_geo");
131    SendMessage(socketFD, "register_service_pe_time");
132    SendMessage(socketFD, "register_service_pe_spectrum");
133    SendMessage(socketFD, "register_service_pe_spacial");
134}
135
136
137void
138PolicyEngine::DeregisterServices(int32_t socketFD)
139{
140    LOG("Policy Engine:: Deregistering services.\n");
141    SendMessage(socketFD, "deregister_service_pe_geo");
142    SendMessage(socketFD, "deregister_service_pe_time");
143    SendMessage(socketFD, "deregister_service_pe_spectrum");
144    SendMessage(socketFD, "deregister_service_pe_spacial");
145}
146
147
148void
149PolicyEngine::LoadPolicies()
150{
151    LOG("PolicyEngine:: Loading policies.\n");
152}
153
154
155void
156PolicyEngine::ReloadPolicies()
157{
158    LOG("PolicyEngine:: Reloading policies.\n");
159}
160
161
162void
163PolicyEngine::SendPEDecision(int32_t socketFD, struct Parameter pList[], \
164        struct CE_Info *ce_info, int32_t decision_array[])
165{
166    char var[50];
167 
168    for (size_t i = 0; i < ce_info->numParameters; i++) {
169        sprintf(var, "%i", decision_array[i]);
170        SendMessage(socketFD, var);
171    }
172}
173
174
175void
176PolicyEngine::ValidateParameters(struct Parameter pList[], \
177        struct CE_Info *ce_info, int decision_array[])
178{
179    LOG("Policy Engine:: Policies Validated.\n");
180    for (size_t i = 0; i < ce_info->numParameters; i++)
181        decision_array[i] = 1;
182}
183
Note: See TracBrowser for help on using the browser.