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

Revision 185, 3.6 KB (checked in by bhilburn, 15 years ago)

PolicyEngine? code now compiling with new RemoteComponent? struct changes. Still
using old ClientSocket? function.

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