29 #include <arpa/inet.h>
30 #include <sys/socket.h>
38 #include "safec_lib.h"
43 NOTIFICATION = 0x1400,
47 static int trm_socket_fd = -1;
49 static int connect_to_trm(
const char *ip,
int port,
int *trm_fd)
53 struct sockaddr_in trm_address = {0};
56 trm_address.sin_family = AF_INET;
57 trm_address.sin_addr.s_addr = inet_addr(ip);
58 trm_address.sin_port = htons(port);
60 socket_fd = socket(AF_INET, SOCK_STREAM, 0);
61 fprintf(stderr,
"Connecting to remote\r\n");
63 static int retry_count = 10;
64 socket_error = connect(socket_fd, (
struct sockaddr *) &trm_address,
sizeof(
struct sockaddr_in));
65 if (socket_error == ECONNREFUSED && retry_count > 0) {
66 fprintf(stderr,
"TRM Server is not started...retry to connect\r\n");
75 if (socket_error == 0){
76 fprintf(stderr,
"Connected\r\n");
78 int current_flags = fcntl(socket_fd, F_GETFL, 0);
79 current_flags &= (~O_NONBLOCK);
81 if (fcntl(socket_fd, F_SETFL, current_flags) < 0) {
82 RDK_LOG(RDK_LOG_DEBUG,
"LOG.RDK.TRM",
"fcntl failed");
98 #include "fcgi_stdio.h"
100 int main(
int argc,
char *argv[])
103 char *debugConfigFile = NULL;
105 printf(
"Starting TRM-FastCGI-Proxy\r\n");
107 int is_connected = 0;
108 errno_t safec_rc = -1;
113 safec_rc = strcmp_s(
"--debugconfig", strlen(
"--debugconfig"), argv[itr], &ind);
115 if((safec_rc == EOK) && (ind == 0))
120 debugConfigFile = argv[itr];
132 RDK_LOG(RDK_LOG_DEBUG,
"LOG.RDK.TRM",
"This is a test line");
134 is_connected = (connect_to_trm(argv[1], atoi(argv[2]), &trm_socket_fd) == 0);
136 while (is_connected && FCGI_Accept() >= 0) {
138 char *content_length = getenv(
"CONTENT_LENGTH");
139 int payload_length = 0;
140 if (content_length != NULL) {
141 payload_length = strtol(content_length, NULL, 10);
142 fprintf(stderr,
"content length is %d\r\n", payload_length);
148 if (payload_length != 0) {
150 static int message_id = 0x1000;
151 const int header_length = 16;
152 unsigned char *buf = (
unsigned char *) malloc(payload_length + header_length);
160 buf[idx++] = (UNKNOWN & 0xFF000000) >> 24;
161 buf[idx++] = (UNKNOWN & 0x00FF0000) >> 16;
162 buf[idx++] = (UNKNOWN & 0x0000FF00) >> 8;
163 buf[idx++] = (UNKNOWN & 0x000000FF) >> 0;
166 buf[idx++] = (message_id & 0xFF000000) >> 24;
167 buf[idx++] = (message_id & 0x00FF0000) >> 16;
168 buf[idx++] = (message_id & 0x0000FF00) >> 8;
169 buf[idx++] = (message_id & 0x000000FF) >> 0;
171 buf[idx++] = (payload_length & 0xFF000000) >> 24;
172 buf[idx++] = (payload_length & 0x00FF0000) >> 16;
173 buf[idx++] = (payload_length & 0x0000FF00) >> 8;
174 buf[idx++] = (payload_length & 0x000000FF) >> 0;
176 int read_fcgi_count = fread((
void *)&buf[idx], 1, payload_length, stdin);
177 if (read_fcgi_count == 0) {
182 fprintf(stderr,
"At %d Read from FastCGI %d vs expected %d\r\n", idx, read_fcgi_count, payload_length);
183 fprintf(stderr,
"\r\n========REQUEST MSG================================================\r\n[");
184 for (idx = 0; idx < (header_length); idx++) {
185 fprintf(stderr,
"%02x", buf[idx]);
187 for (; idx < (payload_length + header_length); idx++) {
188 fprintf(stderr,
"%c", buf[idx]);
191 fprintf(stderr,
"]At %d\r\n==============================================================\r\n", idx);
194 int write_trm_count = write(trm_socket_fd, buf, payload_length + header_length);
195 fprintf(stderr,
"Send to TRM %d vs expected %d\r\n", write_trm_count, payload_length + header_length);
198 if (write_trm_count != 0) {
199 buf = (
char *) malloc(header_length);
201 int read_trm_count = read(trm_socket_fd, buf, header_length);
202 fprintf(stderr,
"Read Header from TRM %d vs expected %d\r\n", read_trm_count, header_length);
203 fprintf(stderr,
"\r\n=====RESPONSE HEADER===================================================\r\n[");
205 for (idx = 0; idx < (header_length); idx++) {
206 fprintf(stderr,
"%02x", buf[idx]);
208 fprintf(stderr,
"\r\n==============================================================\r\n[");
210 if (read_trm_count == header_length) {
211 int payload_length_offset = 12;
212 payload_length =((((
unsigned char)(buf[payload_length_offset+0])) << 24) |
213 (((
unsigned char)(buf[payload_length_offset+1])) << 16) |
214 (((
unsigned char)(buf[payload_length_offset+2])) << 8 ) |
215 (((
unsigned char)(buf[payload_length_offset+3])) << 0 ));
218 fprintf(stderr,
" TRM Response payloads is %d and header %d\r\n", payload_length, header_length);
221 buf = (
char *) malloc(payload_length);
222 read_trm_count = read(trm_socket_fd, buf, payload_length);
223 fprintf(stderr,
"Read Payload from TRM %d vs expected %d\r\n", read_trm_count, payload_length);
225 if (read_trm_count != 0) {
227 printf(
"Content-type: text/html\r\n"
228 "Content-length:%d\r\n"
229 "Content-type:application/json\r\n"
233 int write_fcgi_count = fwrite((
void *)buf, 1, payload_length, stdout);
234 fprintf(stderr,
"Send to FastCGI %d vs expected %d\r\n", write_fcgi_count, payload_length);
235 if (write_fcgi_count == 0) {
259 printf(
"Content-type: text/html\r\n"
260 "Content-length:%d\r\n"
261 "Content-type:application/json\r\n"
266 is_connected = (connect_to_trm(argv[1], atoi(argv[2]), &trm_socket_fd) == 0);
270 fprintf(stderr,
"Out of FCGI Loop\r\n");