37 #include <ndb_global.h>
46 #include <netinet/in.h>
67 #define MAXOPSEXEC 1024
71 static int bTestPassed;
73 void error_handler(
const char* errorText);
76 static int server(
long int);
83 static struct hostent *hp;
84 static struct servent *sp;
89 static struct sockaddr_in myaddr_in;
90 static struct sockaddr_in peeraddr_in;
93 static char temp[600]=
"";
95 static int ops_before_exe = 1;
110 static char *tableName =
"VWTABLE";
116 int main(
int argc,
const char** argv)
138 if (strcmp(argv[i],
"-o") == 0)
140 ops_before_exe = atoi(argv[i+1]);
141 if ((ops_before_exe < 1) || (ops_before_exe > MAXOPSEXEC))
143 cout <<
"Number of operations per execute must be at least 1, and at most " << MAXOPSEXEC << endl;
150 cout <<
"Invalid parameter!" << endl <<
"Look in cdrserver.C for more info." << endl;
160 logname(
temp,
"Cdrserver",
"Mother",
"");
168 m2log(fi,
"Initiation of program");
190 memset ((
char *)&myaddr_in, 0,
sizeof(
struct sockaddr_in));
191 memset ((
char *)&peeraddr_in, 0,
sizeof(
struct sockaddr_in));
193 m2log(fi,
"Socket setup starting");
196 myaddr_in.sin_family = AF_INET;
208 myaddr_in.sin_addr.s_addr = INADDR_ANY;
212 sp = getservbyname (
"cdrserver",
"tcp");
214 m2log(fi,
"Service cdrserver not found in /etc/services");
215 m2log(fi,
"Terminating.");
219 myaddr_in.sin_port = sp->s_port;
223 ls = socket (AF_INET, SOCK_STREAM, 0);
225 m2log(fi,
"Unable to create socket");
226 m2log(fi,
"Terminating.");
229 printf(
"Socket created\n");
230 printf(
"Wait..........\n");
232 if (bind(ls,(
struct sockaddr*)&myaddr_in,
sizeof(
struct sockaddr_in)) == -1) {
233 m2log(fi,
"Unable to bind address");
234 m2log(fi,
"Terminating.");
242 if (listen(ls, 5) == -1) {
243 m2log(fi,
"Unable to listen on socket");
244 m2log(fi,
"Terminating.");
260 m2log(fi,
"Socket setup completed");
261 m2log(fi,
"Start server");
269 printf(
"Waiting for client to connect.........\n");
273 m2log(fi,
"Failed to start server");
274 m2log(fi,
"Terminating.");
277 fprintf(stderr,
"%s: unable to fork daemon\n", argv[0]);
282 m2log(fi,
"Server started");
299 signal(SIGCLD, SIG_IGN);
301 if ((checkchangelog(fi,
temp))==0)
302 m2log(fi,
"Waiting for connection");
307 addrlen =
sizeof(
struct sockaddr_in);
315 s = accept(ls,(
struct sockaddr*) &peeraddr_in, &addrlen);
319 if ((checkchangelog(fi,
temp))==0)
320 m2log(fi,
"Connection attempt from a client");
321 if ((checkchangelog(fi,
temp))==0)
322 m2log(fi,
"Start communication server");
324 if ( s == -1) exit(EXIT_FAILURE);
327 if ((checkchangelog(fi,
temp))==0)
328 m2log(fi,
"Start communication server failed.");
335 printf(
"Connect attempt from client %u\n",peeraddr_in.sin_addr.s_addr);
336 server(peeraddr_in.sin_addr.s_addr);
370 server(
long int servernum)
373 Ndb MyNdb(
"TEST_DB" );
376 NdbOperation *MyOperation;
384 register unsigned int reqcnt;
385 register unsigned int i;
397 long int tmptransfer;
420 struct sched_param param1,param2,param3;
428 unsigned int cdrtime;
438 unsigned short parmtype_prev;
439 unsigned short parmtype;
440 unsigned short parmlen;
445 pthread_attr_t attr1;
446 pthread_attr_t attr2;
447 pthread_attr_t attr3;
448 struct cdr_record *tmpcdrptr,*ftest;
451 int error_from_client = 0;
454 const int headerlen = 24;
462 printf(
"Use the readinfo program to get information about server status\n\n");
464 if((checkchangelog(fi,
temp))==0)
465 c2log(fi,
"Communication server started");
472 hp=gethostbyaddr((
char *) &peeraddr_in.sin_addr,
sizeof(
struct in_addr),peeraddr_in.sin_family);
483 sprintf(hostname,
"Test");
484 logname(lognamn,
"Cdrserver",
"Child",hostname);
487 hostname = hp->h_name;
488 logname(lognamn,
"Cdrserver",
"Child",hostname);
491 log=fopen(lognamn,
"w");
497 n2log(log,
"Setup in progress");
506 BaseString::snprintf(msg,
sizeof(msg),
"Startup from %s port %u",hostname,ntohs(peeraddr_in.sin_port));
507 if ((checkchangelog(fi,
temp))==0)
511 if ((checkchangelog(fi,
temp))==0)
520 if (setsockopt(s, SOL_SOCKET, SO_LINGER,(
const char*)&linger,
sizeof(linger)) == -1) {
521 BaseString::snprintf(msg,
sizeof(msg),
"Setting SO_LINGER, l_onoff=%d, l_linger=%d",linger.l_onoff,linger.l_linger);
522 if ((checkchangelog(log,lognamn))==0)
533 if (setsockopt(s, SOL_SOCKET, SO_RCVBUF,(
const char*) &rcvbuf_size,
sizeof(rcvbuf_size)) == -1) {
535 if ((checkchangelog(log,lognamn))==0)
541 n2log(log,
"Port setup complete");
553 n2log(log,
"Setup completed");
563 printf(
"Client %s connected\nStarting to process the data\n\n",hostname);
565 tmpcdrptr = (
struct cdr_record*)malloc(
sizeof(
struct cdr_record));
569 if (MyNdb.waitUntilReady(30) != 0)
574 tTableId = MyNdb.getTable()->openTable(tableName);
577 printf(
"%d: Creating table",getpid());
580 else printf(
"%d: Table already created",getpid());
584 while (len = recv(s,buf,headerlen,MSG_WAITALL)) {
586 snprintf(msg,
sizeof(msg),
"Error from recv");
587 if ((checkchangelog(log,lognamn))==0)
606 for (;len < headerlen;) {
607 x = recv(s,buf,(headerlen-len),0);
609 snprintf(msg,
sizeof(msg),
"Error from recv");
610 if ((checkchangelog(log,lognamn))==0)
618 MyTransaction = MyNdb.startTransaction();
619 if (MyTransaction == NULL)
620 error_handler(MyNdb.getNdbErrorString());
624 if (MyOperation == NULL)
625 error_handler(MyTransaction->getNdbErrorString());
640 memcpy(&cdrlen,buf+1,2);
644 cdrsubtype=(char)buf[3];
649 tmpcdrptr->CallAttemptState = 1;
650 check = MyOperation->insertTuple();
654 tmpcdrptr->CallAttemptState = 2;
655 check = MyOperation->updateTuple();
659 tmpcdrptr->CallAttemptState = 3;
660 check = MyOperation->deleteTuple();
664 tmpcdrptr->CallAttemptState = 4;
665 check = MyOperation->deleteTuple();
668 error_handler(MyTransaction->getNdbErrorString());
682 memcpy(&cdrid,buf+4,4);
683 tmpcdrptr->CallIdentificationNumber = cdrid;
687 check = MyOperation->equal(
"CIN",(
char*)&cdrid);
689 error_handler(MyTransaction->getNdbErrorString());
696 check = MyOperation->setValue(
"CAS",(
char*)&cdrsubtype);
698 error_handler(MyTransaction->getNdbErrorString());
703 swab(buf+12,buf+12,4);
704 swab(buf+13,buf+13,2);
705 swab(buf+14,buf+14,2);
706 swab(buf+12,buf+12,2);
707 swab(buf+13,buf+13,2);
708 memcpy(&cdrtime,buf+12,4);
715 check = MyOperation->setValue(
"START_TIME",(
char*)&cdrtime);
721 check = MyOperation->setValue(
"StartOfCharge",(
char*)&cdrtime);
733 error_handler(MyTransaction->getNdbErrorString());
770 cdrrestlen=cdrlen-(headerlen-1);
777 len = recv(s,buf,cdrrestlen,MSG_WAITALL);
779 snprintf(msg,
sizeof(msg),
"Error from recv");
780 if ((checkchangelog(log,lognamn))==0)
784 for (;len<cdrrestlen;) {
785 x = recv(s,buf,len-cdrrestlen,0);
787 snprintf(msg,
sizeof(msg),
"Error from recv");
788 if ((checkchangelog(log,lognamn))==0)
797 tmptransfer += cdrlen;
801 puts(
"Going to execute");
804 if (ops == ops_before_exe) {
806 check = MyTransaction->
execute(Commit, CommitAsMuchAsPossible);
807 if ((check == -1) && (MyTransaction->
getNdbError() != 0))
808 error_handler(MyTransaction->getNdbErrorString());
809 MyNdb.closeTransaction(MyTransaction);
811 puts(
"Transaction closed");
817 for (x=0;x<=cdrrestlen && !done && cdrrestlen > 1;) {
828 bcd_decode2(parmlen,&buf[x],crap);
829 tmpcdrptr->BSubscriberNumberLength = (char)parmlen;
830 strcpy(tmpcdrptr->BSubscriberNumber,crap);
831 tmpcdrptr->BSubscriberNumber[parmlen] =
'\0';
833 if (parmlen % 2) x++;
834 tmpcdrptr->USED_FIELDS |= B_BSubscriberNumber;
838 check = MyOperation->setValue(
"BNumber",(
char*)&tmpcdrptr->BSubscriberNumber);
840 error_handler(MyTransaction->getNdbErrorString());
843 if (parmlen != 1) printf(
"ERROR: Calling partys category has wrong length %d\n",parmlen);
844 else tmpcdrptr->ACategory=(char)buf[x];
846 tmpcdrptr->USED_FIELDS |= B_ACategory;
850 check = MyOperation->setValue(
"ACategory",(
char*)&tmpcdrptr->ACategory);
852 error_handler(MyTransaction->getNdbErrorString());
855 bcd_decode2(parmlen,&buf[x],crap);
856 tmpcdrptr->ASubscriberNumberLength = (char)parmlen;
857 strcpy(tmpcdrptr->ASubscriberNumber,crap);
858 tmpcdrptr->ASubscriberNumber[parmlen] =
'\0';
860 if (parmlen % 2) x++;
861 tmpcdrptr->USED_FIELDS |= B_ASubscriberNumber;
865 check = MyOperation->setValue(
"ANumber",(
char*)&tmpcdrptr->ASubscriberNumber);
867 error_handler(MyTransaction->getNdbErrorString());
870 bcd_decode2(parmlen,&buf[x],crap);
871 strcpy(tmpcdrptr->RedirectingNumber,crap);
873 if (parmlen % 2) x++;
874 tmpcdrptr->USED_FIELDS |= B_RedirectingNumber;
878 check = MyOperation->setValue(
"RNumber",(
char*)&tmpcdrptr->RedirectingNumber);
880 error_handler(MyTransaction->getNdbErrorString());
883 if (parmlen != 1) printf(
"ERROR: Called partys category has wrong length %d\n",parmlen);
884 else tmpcdrptr->EndOfSelectionInformation=(char)buf[x];
886 tmpcdrptr->USED_FIELDS |= B_EndOfSelectionInformation;
890 check = MyOperation->setValue(
"EndOfSelInf",(
char*)&tmpcdrptr->EndOfSelectionInformation);
892 error_handler(MyTransaction->getNdbErrorString());
895 if (parmlen != 1) printf(
"ERROR: Release reason has wrong length %d\n",parmlen);
896 else tmpcdrptr->CauseCode=(char)buf[x];
898 tmpcdrptr->USED_FIELDS |= B_CauseCode;
902 check = MyOperation->setValue(
"CauseCode",(
char*)&tmpcdrptr->CauseCode);
904 error_handler(MyTransaction->getNdbErrorString());
909 tmpcdrptr->ReroutingIndicator= (char)buf[x];
910 tmpcdrptr->USED_FIELDS |= B_ReroutingIndicator;
914 tmpcdrptr->ReroutingIndicator= buf[x];
915 tmpcdrptr->USED_FIELDS |= B_ReroutingIndicator;
918 BaseString::snprintf(msg,
sizeof(msg),
"ERROR: Redirection information has wrong length %d\n",parmlen);
919 if ((checkchangelog(log,lognamn))==0)
925 check = MyOperation->setValue(
"RI",(
char*)&tmpcdrptr->ReroutingIndicator);
927 error_handler(MyTransaction->getNdbErrorString());
932 if (parmlen != 1) printf(
"ERROR: User to User information has wrong length %d\n",parmlen);
933 else tmpcdrptr->UserToUserInformation=(char)buf[x];
935 tmpcdrptr->USED_FIELDS |= B_UserToUserInformation;
937 puts(
"UserToUserInf");
939 check = MyOperation->setValue(
"UserToUserInf",(
char*)&tmpcdrptr->UserToUserInformation);
941 error_handler(MyTransaction->getNdbErrorString());
944 bcd_decode2(parmlen,&buf[x],crap);
945 strcpy(tmpcdrptr->OriginalCalledNumber,crap);
947 if (parmlen % 2) x++;
948 tmpcdrptr->USED_FIELDS |= B_OriginalCalledNumber;
952 check = MyOperation->setValue(
"ONumber",(
char*)&tmpcdrptr->OriginalCalledNumber);
954 error_handler(MyTransaction->getNdbErrorString());
957 if (parmlen != 1) printf(
"ERROR: User to User indicator has wrong length %d\n",parmlen);
958 else tmpcdrptr->UserToUserIndicatior=(char)buf[x];
960 tmpcdrptr->USED_FIELDS |= B_UserToUserIndicatior;
962 puts(
"UserToUserInd");
964 check = MyOperation->setValue(
"UserToUserInd",(
char*)&tmpcdrptr->UserToUserIndicatior);
966 error_handler(MyTransaction->getNdbErrorString());
969 bcd_decode2(parmlen,&buf[x],crap);
970 strcpy(tmpcdrptr->LocationCode,crap);
972 if (parmlen % 2) x++;
973 tmpcdrptr->USED_FIELDS |= B_LocationCode;
975 puts(
"LocationCode");
977 check = MyOperation->setValue(
"LocationCode",(
char*)&tmpcdrptr->LocationCode);
979 error_handler(MyTransaction->getNdbErrorString());
982 if (parmlen != 1) printf(
"ERROR: Calling partys category has wrong length %d\n",parmlen);
983 else tmpcdrptr->NetworkIndicator=(char)buf[x];
985 tmpcdrptr->USED_FIELDS |= B_NetworkIndicator;
989 check = MyOperation->setValue(
"NIndicator",(
char*)&tmpcdrptr->NetworkIndicator);
991 error_handler(MyTransaction->getNdbErrorString());
994 if (parmlen != 1) printf(
"ERROR: Calling partys category has wrong length %d\n",parmlen);
995 else tmpcdrptr->TonASubscriberNumber=(char)buf[x];
997 tmpcdrptr->USED_FIELDS |= B_TonASubscriberNumber;
1001 check = MyOperation->setValue(
"TonANumber",(
char*)&tmpcdrptr->TonASubscriberNumber);
1003 error_handler(MyTransaction->getNdbErrorString());
1006 if (parmlen != 1) printf(
"ERROR: Calling partys category has wrong length %d\n",parmlen);
1007 else tmpcdrptr->TonBSubscriberNumber=(char)buf[x];
1009 tmpcdrptr->USED_FIELDS |= B_TonBSubscriberNumber;
1013 check = MyOperation->setValue(
"TonBNumber",(
char*)&tmpcdrptr->TonBSubscriberNumber);
1015 error_handler(MyTransaction->getNdbErrorString());
1018 if (parmlen != 1) printf(
"ERROR: Calling partys category has wrong length %d\n",parmlen);
1019 else tmpcdrptr->TonRedirectingNumber=(char)buf[x];
1021 tmpcdrptr->USED_FIELDS |= B_TonRedirectingNumber;
1025 check = MyOperation->setValue(
"TonRNumber",(
char*)&tmpcdrptr->TonRedirectingNumber);
1027 error_handler(MyTransaction->getNdbErrorString());
1030 if (parmlen != 1) printf(
"ERROR: Calling partys category has wrong length %d\n",parmlen);
1031 else tmpcdrptr->TonOriginalCalledNumber=(char)buf[x];
1033 tmpcdrptr->USED_FIELDS |= B_TonOriginalCalledNumber;
1037 check = MyOperation->setValue(
"TonONumber",(
char*)&tmpcdrptr->TonOriginalCalledNumber);
1039 error_handler(MyTransaction->getNdbErrorString());
1042 if (parmlen != 1) printf(
"ERROR: Calling partys category has wrong length %d\n",parmlen);
1043 else tmpcdrptr->TonLocationCode=(char)buf[x];
1045 tmpcdrptr->USED_FIELDS |= B_TonLocationCode;
1047 puts(
"TonLocationCode");
1049 check = MyOperation->setValue(
"TonLocationCode",(
char*)&tmpcdrptr->TonLocationCode);
1051 error_handler(MyTransaction->getNdbErrorString());
1056 tmpcdrptr->RINParameter=buf[x];
1057 tmpcdrptr->USED_FIELDS |= B_RINParameter;
1060 swab(buf+x,buf+x,2);
1061 tmpcdrptr->RINParameter = buf[x] << 8;
1062 tmpcdrptr->USED_FIELDS |= B_RINParameter;
1066 if ((checkchangelog(log,lognamn))==0)
1072 puts(
"RINParameter");
1074 check = MyOperation->setValue(
"RINParameter",(
char*)&tmpcdrptr->RINParameter);
1076 error_handler(MyTransaction->getNdbErrorString());
1081 swab(buf+x,buf+x,2);
1082 memcpy(&tmpcdrptr->OriginatingPointCode,(buf+x),2);
1083 tmpcdrptr->USED_FIELDS |= B_OriginatingPointCode;
1086 swab(buf+x,buf+x,2);
1087 swab(buf+(x+1),buf+(x+1),2);
1088 swab(buf+x,buf+x,2);
1089 memcpy(&tmpcdrptr->OriginatingPointCode,(buf+x),3);
1090 tmpcdrptr->USED_FIELDS |= B_OriginatingPointCode;
1093 BaseString::snprintf(msg,
sizeof(msg),
"ERROR: OriginatingPointCode parameter has wrong length %d\n",parmlen);
1094 if ((checkchangelog(log,lognamn))==0)
1102 check = MyOperation->setValue(
"OPC",(
char*)&tmpcdrptr->OriginatingPointCode);
1104 error_handler(MyTransaction->getNdbErrorString());
1109 swab(buf+x,buf+x,2);
1110 memcpy(&tmpcdrptr->DestinationPointCode,(buf+x),2);
1114 tmpcdrptr->USED_FIELDS |= B_DestinationPointCode;
1117 swab(buf+x,buf+x,2);
1118 swab(buf+(x+1),buf+(x+1),2);
1119 swab(buf+x,buf+x,2);
1120 memcpy(&tmpcdrptr->DestinationPointCode,(buf+x),3);
1121 tmpcdrptr->USED_FIELDS |= B_DestinationPointCode;
1124 BaseString::snprintf(msg,
sizeof(msg),
"ERROR: DestinationPointCode parameter has wrong length %d\n",parmlen);
1125 if ((checkchangelog(log,lognamn))==0)
1133 check = MyOperation->setValue(
"DPC",(
char*)&tmpcdrptr->DestinationPointCode);
1135 error_handler(MyTransaction->getNdbErrorString());
1138 swab(buf+x,buf+x,2);
1139 memcpy(&tmpcdrptr->CircuitIdentificationCode,(buf+x),2);
1140 tmpcdrptr->USED_FIELDS |= B_CircuitIdentificationCode;
1145 check = MyOperation->setValue(
"CIC",(
char*)&tmpcdrptr->CircuitIdentificationCode);
1147 error_handler(MyTransaction->getNdbErrorString());
1150 printf(
"ERROR: Undefined parmtype %d , previous %d, length %d\n",parmtype,parmtype_prev,parmlen);
1151 BaseString::snprintf(msg,
sizeof(msg),
"ERROR: Undefined parmtype %d , previous %d, length %d\n",parmtype,parmtype_prev,parmlen);
1152 if ((checkchangelog(log,lognamn))==0)
1160 parmtype_prev=parmtype;
1161 if ((cdrrestlen-x) == 1) {
1166 if (ourtime != tmptime)
1168 transfer = tmptransfer;
1170 if (++act_index == 30)
1173 printf(
"Transfer=%d\n",transfer);
1174 printf(
"Total operations=%d\n",reqcnt);
1175 printf(
"CAS1=%d\n",c1/30);
1176 printf(
"CAS2=%d\n",c2/30);
1177 printf(
"CAS3=%d\n",c3/30);
1184 switch (cdrsubtype) {
1186 tmpcdrptr->ClientId = servernum;
1190 check = MyOperation->setValue(
"ClientId",(
char*)&tmpcdrptr->ClientId);
1192 error_handler(MyTransaction->getNdbErrorString());
1193 tmpcdrptr->OurSTART_TIME = ourtime;
1195 puts(
"OurSTART_TIME");
1197 check = MyOperation->setValue(
"OurSTART_TIME",(
char*)&tmpcdrptr->OurSTART_TIME);
1199 error_handler(MyTransaction->getNdbErrorString());
1200 tmpcdrptr->USED_FIELDS |= B_START_TIME;
1202 puts(
"USED_FIELDS");
1204 check = MyOperation->setValue(
"USED_FIELDS",(
char*)&tmpcdrptr->USED_FIELDS);
1206 error_handler(MyTransaction->getNdbErrorString());
1210 tmpcdrptr->OurTimeForStartOfCharge = ourtime;
1212 puts(
"OurStartOfCharge");
1214 check = MyOperation->setValue(
"OurStartOfCharge",(
char*)&tmpcdrptr->OurTimeForStartOfCharge);
1216 error_handler(MyTransaction->getNdbErrorString());
1217 tmpcdrptr->USED_FIELDS |= B_TimeForStartOfCharge;
1219 puts(
"USED_FIELDS");
1221 check = MyOperation->setValue(
"USED_FIELDS",(
char*)&tmpcdrptr->USED_FIELDS);
1223 error_handler(MyTransaction->getNdbErrorString());
1227 tmpcdrptr->OurTimeForStopOfCharge = ourtime;
1229 puts(
"OurStopOfCharge");
1231 check = MyOperation->setValue(
"OurStopOfCharge",(
char*)&tmpcdrptr->OurTimeForStopOfCharge);
1233 error_handler(MyTransaction->getNdbErrorString());
1234 tmpcdrptr->USED_FIELDS |= B_TimeForStopOfCharge;
1236 puts(
"USED_FIELDS");
1238 check = MyOperation->setValue(
"USED_FIELDS",(
char*)&tmpcdrptr->USED_FIELDS);
1240 error_handler(MyTransaction->getNdbErrorString());
1244 tmpcdrptr->CallAttemptState = 4;
1247 snprintf(msg,
sizeof(msg),
"cdrtype %d unknown",cdrsubtype);
1248 if ((checkchangelog(log,lognamn))==0)
1254 if (ops == ops_before_exe) {
1257 puts(
"Going to execute");
1259 check = MyTransaction->
execute(Commit, CommitAsMuchAsPossible);
1260 if ((check == -1) && (MyTransaction->
getNdbError() != 0))
1261 error_handler(MyTransaction->getNdbErrorString());
1262 MyNdb.closeTransaction(MyTransaction);
1264 puts(
"Transaction closed");
1268 puts(
"New transaction initiated");
1294 BaseString::snprintf(msg,
sizeof(msg),
"Completed %s port %u, %d requests",hostname,ntohs(peeraddr_in.sin_port), reqcnt);
1295 if ((checkchangelog(fi,
temp))==0)
1297 error_from_client = 1;
1299 if ((checkchangelog(log,lognamn))==0)
1302 if ((checkchangelog(log,lognamn))==0)
1305 if ((checkchangelog(log,lognamn))==0)
1309 return EXIT_SUCCESS;
1313 if ((checkchangelog(log,lognamn))==0)
1315 if ((checkchangelog(fi,
temp))==0)
1317 error_from_client = 1;
1319 if ((checkchangelog(log,lognamn))==0)
1322 if ((checkchangelog(log,lognamn))==0)
1325 if ((checkchangelog(log,lognamn))==0)
1329 return EXIT_FAILURE;
1356 cout <<
"Creating " << tableName <<
"..." << endl;
1358 MySchemaTransaction = pMyNdb->startSchemaTransaction();
1359 if( MySchemaTransaction == NULL )
1360 error_handler(MySchemaTransaction->getNdbErrorString());
1363 if( MySchemaOp == NULL )
1364 error_handler(MySchemaTransaction->getNdbErrorString());
1367 check = MySchemaOp->createTable( tableName,
1373 error_handler(MySchemaTransaction->getNdbErrorString());
1376 check = MySchemaOp->createAttribute(
"CIN",
1384 error_handler(MySchemaTransaction->getNdbErrorString());
1388 check = MySchemaOp->createAttribute(
"USED_FIELDS", NoKey, 32,
1389 tAttributeSize, UnSigned, MMBased,
1392 error_handler(MySchemaTransaction->getNdbErrorString());
1395 check = MySchemaOp->createAttribute(
"ClientId", NoKey, 32,
1396 tAttributeSize, UnSigned, MMBased,
1399 error_handler(MySchemaTransaction->getNdbErrorString());
1402 check = MySchemaOp->createAttribute(
"START_TIME", NoKey, 32,
1403 tAttributeSize, UnSigned, MMBased,
1406 error_handler(MySchemaTransaction->getNdbErrorString());
1409 check = MySchemaOp->createAttribute(
"OurSTART_TIME", NoKey, 32,
1410 tAttributeSize, UnSigned, MMBased,
1413 error_handler(MySchemaTransaction->getNdbErrorString());
1416 check = MySchemaOp->createAttribute(
"StartOfCharge", NoKey, 32,
1417 tAttributeSize, UnSigned, MMBased,
1420 error_handler(MySchemaTransaction->getNdbErrorString());
1423 check = MySchemaOp->createAttribute(
"StopOfCharge", NoKey, 32,
1424 tAttributeSize, UnSigned, MMBased,
1427 error_handler(MySchemaTransaction->getNdbErrorString());
1430 check = MySchemaOp->createAttribute(
"OurStartOfCharge", NoKey, 32,
1431 tAttributeSize, UnSigned, MMBased,
1434 error_handler(MySchemaTransaction->getNdbErrorString());
1437 check = MySchemaOp->createAttribute(
"OurStopOfCharge", NoKey, 32,
1438 tAttributeSize, UnSigned, MMBased,
1441 error_handler(MySchemaTransaction->getNdbErrorString());
1444 check = MySchemaOp->createAttribute(
"DPC", NoKey, 16,
1445 tAttributeSize, UnSigned, MMBased,
1448 error_handler(MySchemaTransaction->getNdbErrorString());
1451 check = MySchemaOp->createAttribute(
"OPC", NoKey, 16,
1452 tAttributeSize, UnSigned, MMBased,
1455 error_handler(MySchemaTransaction->getNdbErrorString());
1458 check = MySchemaOp->createAttribute(
"CIC", NoKey, 16,
1459 tAttributeSize, UnSigned, MMBased,
1462 error_handler(MySchemaTransaction->getNdbErrorString());
1465 check = MySchemaOp->createAttribute(
"RI", NoKey, 16,
1466 tAttributeSize, UnSigned, MMBased,
1469 error_handler(MySchemaTransaction->getNdbErrorString());
1472 check = MySchemaOp->createAttribute(
"RINParameter", NoKey, 16,
1473 tAttributeSize, UnSigned, MMBased,
1476 error_handler(MySchemaTransaction->getNdbErrorString());
1479 check = MySchemaOp->createAttribute(
"NIndicator", NoKey, 8,
1480 tAttributeSize, Signed, MMBased,
1483 error_handler(MySchemaTransaction->getNdbErrorString());
1486 check = MySchemaOp->createAttribute(
"CAS", NoKey, 8,
1487 tAttributeSize, Signed, MMBased,
1490 error_handler(MySchemaTransaction->getNdbErrorString());
1493 check = MySchemaOp->createAttribute(
"ACategory", NoKey, 8,
1494 tAttributeSize, Signed, MMBased,
1497 error_handler(MySchemaTransaction->getNdbErrorString());
1500 check = MySchemaOp->createAttribute(
"EndOfSelInf", NoKey, 8,
1501 tAttributeSize, Signed, MMBased,
1504 error_handler(MySchemaTransaction->getNdbErrorString());
1507 check = MySchemaOp->createAttribute(
"UserToUserInf", NoKey, 8,
1508 tAttributeSize, Signed, MMBased,
1511 error_handler(MySchemaTransaction->getNdbErrorString());
1514 check = MySchemaOp->createAttribute(
"UserToUserInd", NoKey, 8,
1515 tAttributeSize, Signed, MMBased,
1518 error_handler(MySchemaTransaction->getNdbErrorString());
1521 check = MySchemaOp->createAttribute(
"CauseCode", NoKey, 8,
1522 tAttributeSize, Signed, MMBased,
1525 error_handler(MySchemaTransaction->getNdbErrorString());
1528 check = MySchemaOp->createAttribute(
"ANumber", NoKey, 8,
1529 ASubscriberNumber_SIZE, Signed, MMBased,
1532 error_handler(MySchemaTransaction->getNdbErrorString());
1535 check = MySchemaOp->createAttribute(
"ANumberLength", NoKey, 8,
1536 tAttributeSize, Signed, MMBased,
1539 error_handler(MySchemaTransaction->getNdbErrorString());
1542 check = MySchemaOp->createAttribute(
"TonANumber", NoKey, 8,
1543 tAttributeSize, Signed, MMBased,
1546 error_handler(MySchemaTransaction->getNdbErrorString());
1549 check = MySchemaOp->createAttribute(
"BNumber", NoKey, 8,
1550 BSubscriberNumber_SIZE, Signed, MMBased,
1553 error_handler(MySchemaTransaction->getNdbErrorString());
1556 check = MySchemaOp->createAttribute(
"BNumberLength", NoKey, 8,
1557 tAttributeSize, Signed, MMBased,
1560 error_handler(MySchemaTransaction->getNdbErrorString());
1563 check = MySchemaOp->createAttribute(
"TonBNumber", NoKey, 8,
1564 tAttributeSize, Signed, MMBased,
1567 error_handler(MySchemaTransaction->getNdbErrorString());
1570 check = MySchemaOp->createAttribute(
"RNumber", NoKey, 8,
1571 ASubscriberNumber_SIZE, Signed, MMBased,
1574 error_handler(MySchemaTransaction->getNdbErrorString());
1577 check = MySchemaOp->createAttribute(
"TonRNumber", NoKey, 8,
1578 tAttributeSize, Signed, MMBased,
1581 error_handler(MySchemaTransaction->getNdbErrorString());
1584 check = MySchemaOp->createAttribute(
"ONumber", NoKey, 8,
1585 ASubscriberNumber_SIZE, Signed, MMBased,
1588 error_handler(MySchemaTransaction->getNdbErrorString());
1591 check = MySchemaOp->createAttribute(
"TonONumber", NoKey, 8,
1592 tAttributeSize, Signed, MMBased,
1595 error_handler(MySchemaTransaction->getNdbErrorString());
1598 check = MySchemaOp->createAttribute(
"LocationCode", NoKey, 8,
1599 ASubscriberNumber_SIZE, Signed, MMBased,
1602 error_handler(MySchemaTransaction->getNdbErrorString());
1605 check = MySchemaOp->createAttribute(
"TonLocationCode", NoKey, 8,
1606 tAttributeSize, Signed, MMBased,
1609 error_handler(MySchemaTransaction->getNdbErrorString());
1611 if( MySchemaTransaction->
execute() == -1 ) {
1612 cout << tableName <<
" already exist" << endl;
1613 cout <<
"Message: " << MySchemaTransaction->getNdbErrorString() << endl;
1617 cout << tableName <<
" created" << endl;
1619 pMyNdb->closeSchemaTransaction(MySchemaTransaction);
1625 error_handler(
const char* errorText)
1628 cout << endl <<
"ErrorMessage: " << errorText << endl;