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

Revision 182, 3.5 KB (checked in by bhilburn, 15 years ago)

Need to get the components using standard TCP/IP structs to store information
regarding remote hosts (like where the SML or shell is). This is absolutely the
next step.

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    if(SML)
85        DeregisterServices(SML->socketFD);
86    // TODO otherwise, deregister from shell
87}
88
89
90void
91PolicyEngine::Reset()
92{
93}
94
95
96void
97PolicyEngine::RegisterComponent(int32_t socketFD)
98{
99    SendMessage(socketFD, "register_engine_policy");
100    LOG("Policy Engine:: Registration message sent.\n");
101
102}
103
104
105void
106PolicyEngine::DeregisterComponent(int32_t socketFD)
107{
108    SendMessage(socketFD, "deregister_engine_policy");
109    LOG("Policy Engine:: Registration message sent.\n");
110}
111
112
113void
114PolicyEngine::RegisterServices(int32_t socketFD)
115{
116    LOG("Policy Engine:: Registering services.\n");
117    SendMessage(socketFD, "register_service_pe_geo");
118    SendMessage(socketFD, "register_service_pe_time");
119    SendMessage(socketFD, "register_service_pe_spectrum");
120    SendMessage(socketFD, "register_service_pe_spacial");
121}
122
123
124void
125PolicyEngine::DeregisterServices(int32_t socketFD)
126{
127    LOG("Policy Engine:: Deregistering services.\n");
128    SendMessage(socketFD, "deregister_service_pe_geo");
129    SendMessage(socketFD, "deregister_service_pe_time");
130    SendMessage(socketFD, "deregister_service_pe_spectrum");
131    SendMessage(socketFD, "deregister_service_pe_spacial");
132}
133
134
135void
136PolicyEngine::LoadPolicies()
137{
138    LOG("PolicyEngine:: Loading policies.\n");
139}
140
141
142void
143PolicyEngine::ReloadPolicies()
144{
145    LOG("PolicyEngine:: Reloading policies.\n");
146}
147
148
149void
150PolicyEngine::SendPEDecision(int32_t socketFD, struct Parameter pList[], \
151        struct CE_Info *ce_info, int32_t decision_array[])
152{
153    char var[50];
154 
155    for (size_t i = 0; i < ce_info->numParameters; i++) {
156        sprintf(var, "%i", decision_array[i]);
157        SendMessage(socketFD, var);
158    }
159}
160
161
162void
163PolicyEngine::ValidateParameters(struct Parameter pList[], \
164        struct CE_Info *ce_info, int decision_array[])
165{
166    LOG("Policy Engine:: Policies Validated.\n");
167    for (size_t i = 0; i < ce_info->numParameters; i++)
168        decision_array[i] = 1;
169}
170
Note: See TracBrowser for help on using the browser.