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

Revision 187, 3.7 KB (checked in by bhilburn, 15 years ago)

Abandoning the RemoteComponent? struct; migrating to a simple socketFD
and boolean field.

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