Commit bab9407b8edfb0e773f7f865e632b13679b4d95b

Authored by Benjamin Renard
1 parent 58faca3f

DDClient is now an external project

CMakeLists.txt
... ... @@ -25,9 +25,11 @@ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/modules/")
25 25 find_package( Threads REQUIRED )
26 26 find_package( CRYPT REQUIRED )
27 27 find_package( NetCDF REQUIRED )
  28 +find_package( DDClient REQUIRED )
28 29 find_package( CDF REQUIRED )
29 30  
30 31 get_filename_component(NETCDFLIB_DIR ${NETCDFLIBRARIES} PATH)
  32 +get_filename_component(DDCLIENTLIB_DIR ${DDCLIENTLIBRARIES} PATH)
31 33  
32 34 configure_file (
33 35 "${CMAKE_SOURCE_DIR}/scripts/StartServer.in"
... ... @@ -35,7 +37,6 @@ configure_file (
35 37 )
36 38  
37 39 MESSAGE( STATUS "Build DD_Server Project" )
38   -add_subdirectory(src/CLIENT)
39 40 add_subdirectory(src/SERVER)
40 41 add_subdirectory(src/DECODERS/ascii2nc)
41 42 add_subdirectory(src/DECODERS/cdf2nc)
... ... @@ -50,7 +51,6 @@ add_subdirectory(src/TIMESUPDATENODATA)
50 51 add_subdirectory(tests)
51 52  
52 53 install(FILES "scripts/StartServer" DESTINATION . PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
53   -install(DIRECTORY "src/INCLUDE/" DESTINATION include)
54 54 install(DIRECTORY "src/CALLEXT/" DESTINATION bin/CALLEXT)
55 55  
56 56 SET(CMAKE_VERBOSE_MAKEFILE ON)
... ...
README
1 1 1. Set NETCDF_ROOT to use a specific netcdf installation directory :
2 2 > export NETCDF_ROOT="/usr/lib/"
3 3  
4   -2. Make the build directory :
  4 +2. Set DDCLIENT_ROOT to define DDClient installation directory :
  5 +> export DDCLIENT_ROOT="/home/benjamin/DDClient/"
  6 +
  7 +3. Make the build directory :
5 8 > cmake -E make_directory build
6 9  
7   -3. Configure the build. Set CMAKE_BUILD_TYPE to Debug or Release to configure the build type. Set CMAKE_INSTALL_PREFIX to configure the install directory :
  10 +4. Configure the build. Set CMAKE_BUILD_TYPE to Debug or Release to configure the build type. Set CMAKE_INSTALL_PREFIX to configure the install directory :
8 11 > cmake -E chdir build cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/home/benjamin/DDServer ..
9 12  
10   -4. Build DDServer :
  13 +5. Build DDServer :
11 14 > cmake --build build
12 15  
13   -5. Install DDServer :
  16 +6. Install DDServer :
14 17 > make -C build install VERBOSE=1
15 18  
16   -6. Configure DDServer :
  19 +7. Configure DDServer :
17 20 In the install directory, open "StartServer" and set DDPATH and DDBASE.
18 21  
19   -7. Run DDServer:
  22 +8. Run DDServer:
20 23 > ./StartServer
... ...
cmake/modules/FindDDClient.cmake 0 → 100644
... ... @@ -0,0 +1,24 @@
  1 +FIND_PATH(DDCLIENTINCLUDE_DIR DD.h
  2 + HINTS
  3 + $ENV{DDCLIENT_ROOT}/include/DDClientLibC
  4 + ${DDCLIENT_ROOT}/include/DDClientLibC
  5 +)
  6 +mark_as_advanced(DDCLIENTINCLUDE_DIR)
  7 +
  8 +find_library(DDCLIENTLIBRARY
  9 + NAMES DDClientLibC
  10 + HINTS
  11 + $ENV{DDCLIENT_ROOT}
  12 + ${DDCLIENT_ROOT}
  13 + PATH_SUFFIXES lib
  14 +)
  15 +mark_as_advanced(DDCLIENTLIBRARY)
  16 +
  17 +include(FindPackageHandleStandardArgs)
  18 +FIND_PACKAGE_HANDLE_STANDARD_ARGS(DDClient DEFAULT_MSG DDCLIENTLIBRARY DDCLIENTINCLUDE_DIR)
  19 +
  20 +if(DDCLIENT_FOUND)
  21 + set(DDCLIENTINCLUDE_DIRS ${DDCLIENTINCLUDE_DIR})
  22 + set(DDCLIENTLIBRARIES ${DDCLIENTLIBRARY})
  23 +endif()
  24 +
... ...
scripts/StartServer.in
... ... @@ -4,7 +4,7 @@
4 4 #-------------------------------------------------------------------
5 5 DDBASE=/home/budnik/AMDA-NG.core/DDBASE/DATA
6 6 DDPATH=/home/budnik/AMDA-NG.core/DDBASE
7   -DDLIB=@CMAKE_INSTALL_PREFIX@/lib
  7 +DDLIB=@DDCLIENTLIB_DIR@
8 8 DDBASEBIN=@CMAKE_INSTALL_PREFIX@/bin
9 9 LD_LIBRARY_PATH=$DDLIB/:@NETCDFLIB_DIR@:@libcdf_LIBRARY_DIR@:@USRLIB_DIR@
10 10 export DDBASE DDPATH DDBASEBIN DDLIB LD_LIBRARY_PATH
... ...
src/CLIENT/CMakeLists.txt deleted
... ... @@ -1,22 +0,0 @@
1   -
2   -PROJECT(DD_Client)
3   -
4   -include_directories(
5   - ${CMAKE_HOME_DIRECTORY}/src/INCLUDE/
6   -)
7   -
8   -#Library configuration
9   -file(
10   - GLOB_RECURSE
11   - source_files
12   - ./*
13   -)
14   -
15   -ADD_LIBRARY( DD_Client SHARED ${source_files} )
16   -
17   -target_link_libraries(
18   - DD_Client
19   - ${CMAKE_THREAD_LIBS_INIT}
20   -)
21   -
22   -install (TARGETS DD_Client DESTINATION lib)
src/CLIENT/DD_client.c deleted
... ... @@ -1,931 +0,0 @@
1   -/* $Id: DD_client.c,v 1.4 2012/10/18 09:25:58 budnik Exp $ */
2   -/*==============================================================
3   - * DD SYSTEM
4   - * DD_client.c
5   - * V.6.0
6   - * List of changes:
7   - * November 1995, Version 1.0
8   - * August 1999 :Access security system was installed by Alexandr Grigoriev (v3.0)
9   - * October 22, 2002 - Communication ideology is changed (V.4.0)
10   - * Oct 29, 2002 - Add DD_GetVersion() and some bags are corrected (V.4.1)
11   - * May 1, 2003 - Network error is developped. (The header receiving is changed): V.4.2
12   - * Nov 18, 2004 - Cach error is fixed.
13   - * Jun 17, 2007 - Fedorov, V.4.5 Create new VI and Update data requests
14   - * Sep 24, 2007 - Fedorov, V.4.6 Processing of return of Get_Data
15   - * Dec 03, 2007 - Budnik, V.4.7 There may be several sessions with DD Server inside ONE
16   - * Client session. Keep UserHost & UserName
17   - * Oct 18, 2012 - Knizhnikova, V.4.8 new DD_SetTimeInfo() function
18   - * Dec 15, 2012 - Fedorov, V.6.0. DD_GetMultiData(). Request structure is very changed, CurrentData is not a global structure
19   - *===============================================================*/
20   -
21   -#include <unistd.h>
22   -#include "DD.h"
23   -#include "DD_comm.h"
24   -#include "DD_Access.h"
25   -#include <stdio.h>
26   -#include <string.h>
27   -
28   -#define VERSION "V.6.0"
29   -
30   -/*------------------ GLOBAL STATIC VARIABLES --------------------------*/
31   -int SocketID = -1; /* Global socket id for this communication session */
32   -char UserName[USRLENGTH]="\0"; /* string for user name */
33   -char UserHost[MAXHOSTLENGTH] = "\0"; /* IP of user's host in a string form */
34   -int UserID; /* ID of user at the user's host */
35   -extern int errno;
36   -
37   -/*================== FUNCTIONS =================================*/
38   -/*----------------------- GET User Host-------------------------------*/
39   -int GetUserHost()
40   -{
41   - char HostName[HOSTNAMELENGTH];
42   - struct hostent *Host;
43   - unsigned int HostAddress;
44   - int userid;
45   - static unsigned int m1 = 0X000000FF;
46   - static unsigned int m2 = 0X0000FF00;
47   - static unsigned int m3 = 0X00FF0000;
48   - static unsigned int m4 = 0XFF000000;
49   - unsigned int b1,b2,b3,b4;
50   -
51   - userid = getuid(); /* Get a client user ID */
52   -
53   -/* UserHost can be set by extern WEB function in case of WEB communicatio,
54   - * or it should be defined as local host if DD_client is installed at USER
55   - * computer
56   - */
57   - if(UserHost[0] == '\0')
58   - {
59   - gethostname(HostName,HOSTNAMELENGTH); /* Get a client host name */
60   -
61   - if((Host = gethostbyname(HostName)) == NULL) return NOHOST;
62   - HostAddress = *((unsigned int *)Host->h_addr_list[0]);
63   -
64   - b1 = HostAddress & m1;
65   - b2 = (HostAddress & m2) >> 8;
66   - b3 = (HostAddress & m3) >> 16;
67   - b4 = (HostAddress & m4) >> 24;
68   -
69   - sprintf(UserHost,"%03u.%03u.%03u.%03u\0",b1,b2,b3,b4);
70   - }
71   - return userid;
72   -}
73   -/*-------------------------------------------------------------------*/
74   -
75   -/*------------------ MAKE_CONNECTION ---------------------------*/
76   -/*
77   - * The function returns opened socket, ready to read and write
78   - */
79   -int GetSocket()
80   -/*
81   - * Connect with remote server, and returns socket ID
82   - * In case of error return error number according DD_comm.h
83   - */
84   -{
85   -/*-------- Variables for resource file -----------------*/
86   - char rname[PATHLENGTH]; /* name of res file */
87   - char line[PATHLENGTH];
88   - char *path;
89   - FILE *resfile; /* resource file */
90   - char *pline;
91   -
92   -/*---------- Variables for network ---------------------*/
93   - static struct hostent *Host; /* name & internet (32b) address for
94   - remout hosts (see netdb.h) */
95   - static char RemSerName[PATHLENGTH]; /* name of remote server */
96   -
97   - struct servent *serv; /* pointer to static structure of
98   - port number of registrated service */
99   -
100   - static struct sockaddr_in IntAFAddr; /* structure of internet address of type AF_INET
101   - see <netinet/in.h>
102   - to get name of socket we should
103   - to convert pointer to this structure
104   - to pointer to "srtruct sockaddr" where
105   - all fields are "char array". */
106   -
107   - int AFAddrLen = sizeof(struct sockaddr_in); /* size of internet address, <netinet/in.h> 18 bytes*/
108   - int ScAddrLen = sizeof(struct sockaddr); /* size of socket address, <sys/socket.h> 18 bytes*/
109   -
110   - int cc,i;
111   - int arg = 0;
112   - int normaddr;
113   -/*
114   - *---------- Getting socket and its address ---------------------*/
115   -/*---------------- HOST and PORT ------------------------------*/
116   - if((path = getenv("DDPATH")) == NULL)
117   - {
118   - strcpy(rname,"DD.res");
119   - }
120   - else
121   - {
122   - strcpy(rname,path);
123   - strcat(rname, "/DD.res");
124   - }
125   -/*
126   - (void *)strcpy(rname,"./DD.res");
127   -*/
128   - if((resfile = fopen(rname,"r")) == NULL)
129   - {
130   - fprintf(stderr,"No resource file, sorry\n");
131   - exit(1);
132   - }
133   -
134   - pline = fgets(RemSerName, PATHLENGTH-1, resfile);
135   - pline = fgets(line, PATHLENGTH-1, resfile);
136   - fclose(resfile);
137   -
138   - RemSerName[strlen(RemSerName)-1] = '\0';
139   - sscanf(line,"%d",&(normaddr));
140   -
141   - IntAFAddr.sin_port = htons((uint16_t)normaddr); /* Conversion of the port number to
142   - universal net form */
143   -/*---------------- END of FILE READING --------------------------*/
144   -/*
145   - *------- Trying to open socket with this address and name ---------
146   - */
147   - if((Host = gethostbyname(RemSerName)) == NULL) /* Get address and other information by
148   - host name, see netdb.h */
149   - {
150   - fprintf(stderr,"Server %s not found\n",RemSerName);
151   - return(-1);
152   - }
153   -
154   - if((SocketID = socket(AF_INET,SOCK_STREAM,PROTOCOL)) < 0)
155   - {
156   - perror("Socket:"); return(-1);
157   - }
158   -
159   -/* Filling full internet address for socket "name"
160   - * this address will be used to get communication point */
161   -
162   - IntAFAddr.sin_family = Host->h_addrtype;
163   - memcpy(&IntAFAddr.sin_addr.s_addr,Host->h_addr_list[0],Host->h_length);
164   -
165   - /* Connection to server socket on remote computer */
166   - if(connect(SocketID,(struct sockaddr *)&IntAFAddr,AFAddrLen) < 0)
167   - { perror("connect"); return(-1); }
168   -
169   -/*
170   - * Get Host name and Host ID for security application
171   - */
172   - if((UserID = GetUserHost()) < 0) return(NOHOST);
173   -
174   - return SocketID;
175   -}
176   -/*------------------- end of GetSocket ---------------------*/
177   -
178   -/*==================== Receive From Net ======================*/
179   -/*
180   - * Smart buffered receiver
181   - */
182   -int ReceiveFromNet(char *buf, int PacketSize)
183   -{
184   - int CurLength = 0;
185   - int i,cc;
186   - do
187   - {
188   - i = 0;
189   - while(((cc = recv(SocketID,buf+ CurLength,PacketSize - CurLength,0)) < 0) && (i < TRY)) i++;
190   - if(cc < 0) return -1;
191   - CurLength = CurLength + cc;
192   - } while(CurLength < PacketSize);
193   - return 1;
194   -}
195   -
196   -/*------------------ Open Virtual Instrument -----------------------*/
197   -/*
198   - * If no connection, connect to server, then try to order data set and return
199   - * ID if OK or ErrorNumber if not
200   - */
201   -int DD_SetVariable(char *InstrName)
202   -{
203   - static caddr_t buff = NULL;
204   - static XDR xdrs;
205   - int InstrID; /* Instrumnet ID to return */
206   - int cc,i;
207   - int Request = OPENINSREQ;
208   - int hostlen,userlen;
209   - char *PUserHost = UserHost, *PUserName = UserName;
210   - /* We need this because XDR works with adresses of pointers */
211   -
212   -/* If there is no connection, try to get it */
213   - if(SocketID < 0)
214   - if((SocketID = GetSocket()) < 0) return(NOCONNECTION);
215   -
216   -/* Encoding request by XDR to buf */
217   -/* Buffer and stream allocation */
218   - buff = (caddr_t)malloc(REQUESTLENGTH);
219   -
220   - xdrmem_create(&xdrs, buff, REQUESTLENGTH, XDR_ENCODE);
221   -
222   - xdr_int(&xdrs,&Request);
223   - xdr_string(&xdrs, &InstrName, strlen(InstrName));
224   -
225   -/* Send Open Virtual Instrument request */
226   -
227   - if((cc = send(SocketID,buff,REQUESTLENGTH,0)) < 0)
228   - {
229   - perror("DD_SetVariable:");
230   - free(buff);
231   - xdr_destroy(&xdrs);
232   - return(REQSENDERR);
233   - }
234   - xdrmem_create(&xdrs, buff, REQUESTLENGTH, XDR_FREE);
235   -
236   -/*-------- preparation an authorization request ----------------*/
237   - if(UserName[0] == '\0') strcpy(UserName,NONAME);
238   - hostlen = strlen(UserHost);
239   - userlen = strlen(UserName);
240   -
241   - xdrmem_create(&xdrs, buff,REQUESTLENGTH, XDR_ENCODE);
242   -
243   - xdr_int(&xdrs,&UserID);
244   - xdr_string(&xdrs, &PUserHost, hostlen);
245   - xdr_string(&xdrs, &PUserName, userlen);
246   -/* fprintf(stderr,"userid %d host %s DD_name %s\n",UserID,UserHost,UserName); */
247   -
248   -/* Send request */
249   - if((cc = send(SocketID,buff,REQUESTLENGTH,0)) < 0)
250   - {
251   - perror("DD_Set_Variable:");
252   - free(buff);
253   - xdr_destroy(&xdrs);
254   - return(REQSENDERR);
255   - }
256   -
257   - free(buff);
258   - xdr_destroy(&xdrs);
259   -
260   -/* Get reply */
261   - buff = (caddr_t)malloc(REPLYLENGTH);
262   -/*
263   - i=0;
264   - while(((cc = recv(SocketID,buff,REPLYLENGTH,0)) < 0) && (i < TRY)) i++;
265   -*/
266   - if((cc = ReceiveFromNet(buff, REPLYLENGTH)) < 0)
267   - {
268   - perror("DD_SET_Variable:");
269   - free(buff);
270   - return(REPLYRECERR);
271   - }
272   -
273   - xdrmem_create(&xdrs, buff, REPLYLENGTH, XDR_DECODE);
274   - xdr_int(&xdrs,&InstrID);
275   -
276   -/* Free all */
277   - free(buff);
278   - xdr_destroy(&xdrs);
279   -
280   - return InstrID;
281   -}
282   -
283   -/*----------------------- DD_GetInform -----------------------------*/
284   -/*
285   - * Returns "OK" if OK, fill DD_Data structure
286   - * Return negative value if error
287   - */
288   -
289   -int DD_GetInform(int VarID,char *AttrName,DD_data_t **data)
290   -{
291   - static void *v = NULL;
292   - static DD_data_t idd = {DD_CHAR, 0, NULL,1, &v};
293   - static caddr_t buf = NULL;
294   - static XDR xdrs;
295   - int id;
296   - int cc;
297   - int length;
298   - int op = DATAINFOREQ;
299   - int type; /* type of information or error */
300   - int DimNumbers;
301   - int PacketSize;
302   - int CurLength;
303   - int i;
304   - u_int count;
305   - u_int MaxNumber;
306   -
307   -/*------------------- Empty static data ------------------------*/
308   - if(idd.Dimensions != NULL)
309   - {
310   - free(idd.Dimensions);
311   - idd.Dimensions = NULL;
312   - }
313   - if(idd.Variables[0] != NULL)
314   - {
315   - free(idd.Variables[0]);
316   - idd.Variables[0] = NULL;
317   - }
318   -
319   -/*------------------ Check the Name length -----------------------*/
320   - if(strlen(AttrName) > MAXVARLENGTH) length = MAXVARLENGTH;
321   - else length = strlen(AttrName);
322   -
323   -/*----------- Allocation of memory and stream --------------------*/
324   - buf = (caddr_t)malloc(REQUESTLENGTH);
325   - xdrmem_create(&xdrs, buf, REQUESTLENGTH, XDR_ENCODE);
326   -
327   -/*------------------- Encoding the request ----------------------*/
328   - xdr_int(&xdrs,&op);
329   - xdr_int(&xdrs,&VarID);
330   - xdr_string(&xdrs, &AttrName, length);
331   -
332   -/*------------------------ Send request ---------------------------*/
333   - if((cc = send(SocketID,buf,REQUESTLENGTH,0)) < 0)
334   - {
335   - perror("DD_GetInform:");
336   - free(buf);
337   - xdr_destroy(&xdrs);
338   - return(REQSENDERR);
339   - }
340   - free(buf);
341   - xdr_destroy(&xdrs);
342   -
343   -/*------------------------ Get reply header ------------------------*/
344   -
345   - buf = (caddr_t)malloc(REPLYLENGTH);
346   -/*
347   - i=0;
348   - while(((cc = recv(SocketID,buf,REPLYLENGTH,0)) < 0) && (i < TRY)) i++;
349   - if(cc < 0)
350   -*/
351   - if((cc = ReceiveFromNet(buf, REPLYLENGTH)) < 0)
352   - {
353   - perror("DD_GetInform:");
354   - free(buf);
355   - return(REPLYRECERR);
356   - }
357   -
358   - xdrmem_create(&xdrs, buf, REPLYLENGTH, XDR_DECODE);
359   - xdr_int(&xdrs,&type);
360   - if(type < 0)
361   - {
362   - free(buf);
363   - xdr_destroy(&xdrs);
364   - return(type);
365   - }
366   - xdr_int(&xdrs,&DimNumbers);
367   - xdr_int(&xdrs,&PacketSize);
368   - free(buf);
369   - xdr_destroy(&xdrs);
370   -
371   - idd.DimNumber = DimNumbers;
372   - idd.type = type;
373   -
374   -/*---------------------------- Get Data Packet ----------------------*/
375   - if(PacketSize > 0) buf = (caddr_t)malloc(PacketSize);
376   - else return(REPLYRECERR);
377   -
378   - if((cc = ReceiveFromNet(buf, PacketSize)) < 0)
379   - {
380   - perror("DD_GetInform:");
381   - free(buf);
382   - return(REPLYRECERR);
383   - }
384   -
385   -/*--------------------- Decoding data packet ------------------------*/
386   - if(DimNumbers > 0)
387   - {
388   -/*----------- Memory allocation and xdr creating -----------------*/
389   - xdrmem_create(&xdrs, buf, (u_int)PacketSize, XDR_DECODE);
390   -
391   -/*----------------- Dimensions decoding -------------------------*/
392   - if(idd.Dimensions !=NULL) free(idd.Dimensions);
393   - idd.Dimensions = (int *)malloc(DimNumbers*sizeof(int));
394   -
395   - xdr_array(&xdrs, (caddr_t *)&(idd.Dimensions),
396   - &count,
397   - (u_int )DimNumbers,
398   - unixlen[DD_INT],
399   - (xdrproc_t)xdr_int);
400   -
401   - count = 1;
402   - for(i=0; i < DimNumbers;i++)
403   - count = count*idd.Dimensions[i];
404   - MaxNumber = count;
405   - }
406   - else
407   - {
408   - free(buf);
409   - return(REPLYRECERR);
410   - }
411   -
412   -/*---------------- Allocate memory for Variables and decoding ------------------*/
413   - if(idd.Variables[0] != NULL) free(idd.Variables[0]);
414   - idd.Variables[0] = (int *)malloc(unixlen[type] * MaxNumber);
415   -
416   - xdr_array(&xdrs,((caddr_t*)(&idd.Variables[0])),&count,
417   - MaxNumber, unixlen[type], (xdrproc_t)ConvFunc[type]);
418   -
419   -/*-------------------------- Free all ------------------------------*/
420   - free(buf);
421   - xdr_destroy(&xdrs);
422   -
423   - *data = &idd;
424   - return OK;
425   -}
426   -
427   -/*====================================================
428   - * DD_SetTime()
429   - *====================================================*/
430   -/*-----------------------------------------------------
431   - * VarID - ID of Data Set
432   - * Time - string in DD type
433   - * Returns 1 if OK and negative in case of err
434   - *---------------------------------------------------*/
435   -
436   -int DD_SetTime(int VarID,char *Time)
437   -{
438   - static caddr_t buf = NULL;
439   - static XDR xdrs;
440   - static int op = TIMESETREQ;
441   - int type;
442   - int cc,i;
443   - int DoneFlag = 0;
444   -
445   - while(DoneFlag == 0)
446   - {
447   -/* Allocatein memory and stream */
448   - buf = (caddr_t)malloc(REQUESTLENGTH);
449   - xdrmem_create(&xdrs, buf, REQUESTLENGTH, XDR_ENCODE);
450   -
451   -/* Encoding the request */
452   - xdr_int(&xdrs,&op);
453   - xdr_int(&xdrs,&VarID);
454   - xdr_string(&xdrs, &Time, TIMELENGTH);
455   -
456   -/* Send request */
457   - if((cc = send(SocketID,buf,REQUESTLENGTH,0)) < 0)
458   - {
459   - perror("DD_SetTime:");
460   - free(buf);
461   - xdr_destroy(&xdrs);
462   - return(REQSENDERR);
463   - }
464   - free(buf);
465   - xdr_destroy(&xdrs);
466   -
467   -/* Get reply header */
468   -
469   - buf = (caddr_t)malloc(REPLYLENGTH);
470   - if((cc = ReceiveFromNet(buf, REPLYLENGTH)) < 0)
471   - {
472   - perror("DD_SetTime:");
473   - free(buf);
474   - return(REPLYRECERR);
475   - }
476   -
477   - xdrmem_create(&xdrs, buf, REPLYLENGTH, XDR_DECODE);
478   - xdr_int(&xdrs,&type);
479   -
480   - free(buf);
481   - xdr_destroy(&xdrs);
482   -
483   - if(type < 0)
484   - {
485   - if(type == CACHTOOREC) sleep((unsigned )(FILEACCMARG));
486   - else return type;
487   - }
488   - else DoneFlag = 1;
489   - }
490   - return 1 ;
491   -}
492   -
493   -/*==================================================================
494   - * DD_SetTimeInfo()
495   - *=================================================================*/
496   -/*----------------------------------------------------------
497   - * VarID - ID of Data Set
498   - * Time - string in DD type
499   - * RealTime - double : time value pointer points to
500   - * Returns 1 if OK and negative in case of err
501   - *----------------------------------------------------------*/
502   -
503   -int DD_SetTimeInfo(int VarID, char *Time, double *RealTime)
504   -{
505   - int err;
506   - static char TimeInt[17] = "0000000000001000\0";
507   - DD_data_t *data;
508   -
509   - err = DD_SetTime(VarID, Time);
510   - if (err < 1) return err;
511   -
512   - err = DD_GetData(VarID, "Time", TimeInt, &data);
513   - if (err < 0) return err;
514   - if (data->VarNumber < 1) return OUTOFTIME;
515   -
516   - *RealTime = DD_Time2Double((char *)data->Variables[0]);
517   -
518   - return 1 ;
519   -}
520   -
521   -/*=========================================================
522   - * DD_GetData()
523   - * Just an interface to the DD_GetMultiData()
524   - *========================================================*/
525   -int DD_GetData(int VarID, char *VarName, char *TimeInt, DD_data_t **data)
526   -{
527   - char *xxx=VarName;
528   - int err;
529   - err = DD_GetMultiData(VarID, 1, &xxx, TimeInt, data, 1);
530   - return err;
531   -}
532   -/*=========================================================
533   - * DD_GetMultiData()
534   - *========================================================*/
535   -/*---------------------------------------------------------
536   - * VarID - ID of open virtual instrument
537   - * VarSize - the size of the array names
538   - * VarNames - araay of the variables names
539   - * TimeInt - Time interval in DD_time style
540   - * data - returned data
541   - * Return values:
542   - * positives:
543   - * MOREDELAY - call this function again after delay
544   - * MOREDATA - call this function again to complete request
545   - * OK - all data received
546   - * negative value - error (see DD.h)
547   - *---------------------------------------------------------*/
548   -
549   -int DD_GetMultiData(int VarID,size_t VarSize, char **VarNames,char *TimeInt,DD_data_t **data, int BackFlag)
550   -{
551   - static DD_data_t *CurrentData = NULL; /* Data records array to keep until the next call */
552   - static size_t OldVarSize = 0;
553   - static caddr_t buf = NULL;
554   - static XDR xdrs;
555   - static int LastPacketFlag = OK;
556   - int id;
557   - int cc;
558   - int *NameLength = NULL; /* Array of lengths */
559   - int XDRStrLen; /* xdr length of a string */
560   - int XDRReqlength; // Length in bytes the XDR stream
561   - int op = DATAGETREQ;
562   - int type; /* type of information or error */
563   - int DimNumbers;
564   - int PacketSize;
565   - int CurLength;
566   - u_int count, MaxSize;
567   - int i;
568   -
569   - /* Empty static data */
570   - for(id = 0; id < OldVarSize; id++)
571   - {
572   - if(CurrentData[id].Dimensions != NULL)
573   - {
574   - free(CurrentData[id].Dimensions);
575   - CurrentData[id].Dimensions = NULL;
576   - }
577   - if(CurrentData[id].Variables != NULL)
578   - {
579   - for(i = 0; i< CurrentData[id].VarNumber; i++)
580   - free(CurrentData[id].Variables[i]);
581   - free(CurrentData[id].Variables);
582   - CurrentData[id].Variables = NULL;
583   - }
584   - }
585   - free(CurrentData);
586   -
587   - /*--------------------------------------
588   - * Create a new Current Data empty array
589   - *-------------------------------------*/
590   - OldVarSize = VarSize;
591   - CurrentData = (DD_data_t *)malloc(sizeof(DD_data_t)*VarSize);
592   - for(id = 0; id < VarSize; id++)
593   - {
594   - CurrentData[id].Dimensions = NULL;
595   - CurrentData[id].Variables = NULL;
596   - CurrentData[id].DimNumber = 0;
597   - CurrentData[id].VarNumber = 0;
598   - CurrentData[id].type = 0;
599   - }
600   - /*--------------------------------------------------------------
601   - * The follows request preparation and send is performed only
602   - * if the priveous data packed is completely received
603   - *--------------------------------------------------------------*/
604   - if((LastPacketFlag == OK) || (LastPacketFlag == MOREDELAY))
605   - {
606   - /*---------------------------------------
607   - * Preparation of the array the name lengths
608   - * Note that the names are cut down to the MAXVARLENGTH
609   - * Calculation the packet size
610   - *---------------------------------------*/
611   - NameLength = (int *)malloc(sizeof(int)*VarSize);
612   - XDRReqlength = 8; /* the length of the first+last arguments */
613   - for(id = 0; id < VarSize; id++)
614   - {
615   - if(strlen(VarNames[id]) > MAXVARLENGTH) NameLength[id] = MAXVARLENGTH;
616   - else NameLength[id] = strlen(VarNames[id]);
617   - XDRStrLen = (NameLength[id] / 4) * 4;
618   - if((NameLength[id] % 4) > 0) XDRStrLen += 4;
619   - XDRReqlength += XDRStrLen + 4; // String length + 4 bytes length coding
620   - //fprintf(stderr,"Variable %s, length %d, total %d\n",VarNames[id],XDRStrLen,XDRReqlength);
621   - }
622   - /*--------------------------------
623   - * The first packet of the request of the standard size
624   - * Allocation corresponding memory and stream
625   - *------------------------------*/
626   - buf = (caddr_t)malloc(REQUESTLENGTH);
627   - xdrmem_create(&xdrs, buf, REQUESTLENGTH, XDR_ENCODE);
628   -
629   - /* Encoding the request */
630   - xdr_int(&xdrs,&op);
631   - xdr_int(&xdrs,&VarID);
632   - xdr_string(&xdrs,&TimeInt,TIMELENGTH);
633   - xdr_int(&xdrs,&XDRReqlength);
634   -
635   - /* Send the first request */
636   - if((cc = send(SocketID,buf,REQUESTLENGTH,0)) < 0)
637   - {
638   - perror("DD_GetData: First Request");
639   - free(buf);
640   - xdr_destroy(&xdrs);
641   - return(REQSENDERR);
642   - }
643   - free(buf);
644   - xdr_destroy(&xdrs);
645   -
646   - /*--------------------------------
647   - * The Second packet of XDRReqlength size
648   - * Allocation corresponding memory and stream
649   - *------------------------------*/
650   - buf = (caddr_t)malloc(XDRReqlength);
651   - xdrmem_create(&xdrs, buf, XDRReqlength, XDR_ENCODE);
652   - xdr_int(&xdrs,(int *)(&VarSize));
653   - for(id = 0; id < VarSize; id++) xdr_string(&xdrs, &VarNames[id], NameLength[id]);
654   - xdr_int(&xdrs,&BackFlag);
655   -
656   - /* Send the second request */
657   - if((cc = send(SocketID,buf,XDRReqlength,0)) < 0)
658   - {
659   - perror("DD_GetData:Second Packet");
660   - free(buf);
661   - xdr_destroy(&xdrs);
662   - return(REQSENDERR);
663   - }
664   - free(buf);
665   - xdr_destroy(&xdrs);
666   - }
667   -
668   - /*-----------------------------------------------------------
669   - * Get the VarSize reply headers and VarSize data
670   - *----------------------------------------------------------*/
671   - for(id = 0; id < VarSize; id++)
672   - {
673   - /*-------------------
674   - * The header
675   - *-----------------*/
676   - buf = (caddr_t)malloc(REPLYLENGTH);
677   - if((cc = ReceiveFromNet(buf, REPLYLENGTH)) < 0)
678   - {
679   - perror("DD_GetData:Error while header receive");
680   - free(buf);
681   - return(REPLYRECERR);
682   - }
683   -
684   - xdrmem_create(&xdrs, buf, REPLYLENGTH, XDR_DECODE);
685   - xdr_int(&xdrs,&type);
686   - xdr_int(&xdrs,&DimNumbers);
687   - xdr_int(&xdrs,&PacketSize);
688   - free(buf);
689   - xdr_destroy(&xdrs);
690   -
691   - if((type < 0) && (type != NOVAR)) /* Server returns unrecoverable error */
692   - {
693   - fprintf(stderr,"DD_GetData: Server returns %d, unrecovable error\n",type);
694   - return type;
695   - }
696   -
697   - /*----------- Header is received ----------------------*/
698   - CurrentData[id].DimNumber = DimNumbers - 1;
699   - CurrentData[id].type = type;
700   -
701   - /*--------------- Receive Data Packet ------------------------------*/
702   - if(PacketSize > 0) buf = (caddr_t)malloc(PacketSize);
703   - else return(REPLYRECERR);
704   - if((cc = ReceiveFromNet(buf, PacketSize)) < 0)
705   - {
706   - perror("DD_GetData: Error while data packet receive");
707   - free(buf);
708   - return(REPLYRECERR);
709   - }
710   - /*----------------- Decoding data packet --------------------*/
711   - if(DimNumbers > 1)
712   - {
713   - xdrmem_create(&xdrs, buf, (u_int)PacketSize, XDR_DECODE);
714   - count = DimNumbers-1;
715   - /* allocation memory for dimensions */
716   - CurrentData[id].Dimensions = (int *)malloc((DimNumbers-1)*sizeof(int));
717   -
718   - xdr_int(&xdrs,&LastPacketFlag); /* Last Paket Indicatort*/
719   - xdr_int(&xdrs,&CurrentData[id].VarNumber); /* Variables number */
720   -
721   - if(LastPacketFlag > 2)
722   - {
723   - LastPacketFlag = OK;
724   - CurrentData[id].VarNumber = 0;
725   - free(buf);
726   - return(REPLYRECERR);
727   - }
728   -
729   - /*----- Decoding dimensions array -------------------*/
730   - xdr_array(&xdrs, (caddr_t *)&(CurrentData[id].Dimensions),
731   - &count,
732   - (u_int )DimNumbers-1,
733   - unixlen[DD_INT],
734   - (xdrproc_t)xdr_int);
735   -
736   - count = 1;
737   - for(i=0; i < DimNumbers-1;i++)
738   - {
739   - count = count*CurrentData[id].Dimensions[i];
740   - }
741   - MaxSize = count;
742   - }
743   - else
744   - {
745   - if(type != NOVAR)
746   - {
747   - free(buf);
748   - return(REPLYRECERR);
749   - }
750   - else
751   - {
752   - CurrentData[id].VarNumber = 0;
753   - }
754   - }
755   -
756   - /*---------- Decoding variables -------------------------*/
757   - if(CurrentData[id].VarNumber != 0) CurrentData[id].Variables = (void *)malloc(CurrentData[id].VarNumber*sizeof(void *));
758   - else CurrentData[id].Variables = NULL;
759   -
760   - for(i = 0; i < CurrentData[id].VarNumber; i++)
761   - {
762   - CurrentData[id].Variables[i] = (void *)malloc(unixlen[type]*MaxSize);
763   - count = MaxSize;
764   - xdr_array(&xdrs,(caddr_t *)(&(CurrentData[id].Variables[i])),&count,MaxSize,unixlen[type], (xdrproc_t)ConvFunc[type]);
765   - }
766   -
767   - /* Free all */
768   - free(buf);
769   - xdr_destroy(&xdrs);
770   - }
771   - *data = CurrentData;
772   - return(LastPacketFlag);
773   -}
774   -/*===================================================================*/
775   -
776   -/*-------------------------- DD_CLOSE --------------------------------*/
777   -/*
778   - *
779   - * VarID - entry point of ID table
780   - * Returns 1 if OK or negative err
781   - * Close Socket if no VarID more ( this information supplyed by server )
782   - */
783   -
784   -int DD_Close(int VarID)
785   -{
786   - static caddr_t buf = NULL;
787   - static XDR xdrs;
788   - static int op = CLOSEINSREQ;
789   - int RemainedID; /* Server returns number of remained ID */
790   - int cc,i;
791   -/* Allocatein memory and stream */
792   - buf = (caddr_t)malloc(REQUESTLENGTH);
793   - xdrmem_create(&xdrs, buf, REQUESTLENGTH, XDR_ENCODE);
794   -
795   -/* Encoding the request */
796   - xdr_int(&xdrs,&op);
797   - xdr_int(&xdrs,&VarID);
798   -
799   -/* Send request */
800   - if((cc = send(SocketID,buf,REQUESTLENGTH,0)) < 0)
801   - {
802   - perror("DD_Close:");
803   - free(buf);
804   - xdr_destroy(&xdrs);
805   - return(REQSENDERR);
806   - }
807   - free(buf);
808   - xdr_destroy(&xdrs);
809   -
810   -/* Get reply header */
811   -
812   - buf = (caddr_t)malloc(REPLYLENGTH);
813   -/*
814   - i = 0;
815   - while(((cc = recv(SocketID,buf,REPLYLENGTH,0)) < 0) && (i < TRY)) i++;
816   - if(cc < 0)
817   -*/
818   - if((cc = ReceiveFromNet(buf, REPLYLENGTH)) < 0)
819   - {
820   - perror("DD_Close:");
821   - free(buf);
822   - return(REPLYRECERR);
823   - }
824   -
825   - xdrmem_create(&xdrs, buf, REPLYLENGTH, XDR_DECODE);
826   - xdr_int(&xdrs,&RemainedID);
827   - if(RemainedID< 0)
828   - {
829   - free(buf);
830   - xdr_destroy(&xdrs);
831   - return(RemainedID);
832   - }
833   - free(buf);
834   - xdr_destroy(&xdrs);
835   -
836   - if(RemainedID == 0)
837   - {
838   - shutdown(SocketID,2);
839   - close(SocketID);
840   - SocketID = -1;
841   -/*
842   - UserHost[0] = '\0';
843   - UserName[0] = '\0';
844   -*/
845   - }
846   -
847   - return(1);
848   -}
849   -/*------------------------------------------------------------------------------*/
850   -
851   -/*=============== DATABASE UPDATE FUNCTIONS ====================================*/
852   -/*------------------ DD_AddDataSet() -------------------------------------------*/
853   -int DD_AddDataSet(char *DataSetName, char *RemSetID, char *BaseName)
854   -{
855   - static caddr_t buf = NULL;
856   - static XDR xdrs;
857   - static int op = ADDVIREQ;
858   - int Err; /* Server returns OK or NOEXEC */
859   - int cc,i,length;
860   - int CloseFlag = 0;
861   -
862   -/* If there is no connection, try to get it */
863   - if(SocketID < 0)
864   - {
865   - if((SocketID = GetSocket()) < 0) return(NOCONNECTION);
866   - CloseFlag = 1; // To close Connection at the end
867   - }
868   -
869   -/* Allocatein memory and stream */
870   - buf = (caddr_t)malloc(REQUESTLENGTH);
871   - xdrmem_create(&xdrs, buf, REQUESTLENGTH, XDR_ENCODE);
872   -
873   -/* Encoding the request */
874   - xdr_int(&xdrs,&op);
875   -
876   -/* Coding DataSetName */
877   - if((length = strlen(DataSetName)) > MAXSETLENGTH) length = MAXSETLENGTH;
878   - xdr_string(&xdrs, &DataSetName, length);
879   -/* Coding RemSetID */
880   - if((length = strlen(RemSetID)) > MAXVARLENGTH) length = MAXVARLENGTH;
881   - xdr_string(&xdrs, &RemSetID, length);
882   -/* Coding BaseName */
883   - if((length = strlen(BaseName)) > MAXVARLENGTH) length = MAXVARLENGTH;
884   - xdr_string(&xdrs, &BaseName, length);
885   -
886   -/* Send request */
887   - if((cc = send(SocketID,buf,REQUESTLENGTH,0)) < 0)
888   - {
889   - perror("DD_AddDataSet:");
890   - free(buf);
891   - xdr_destroy(&xdrs);
892   - return(REQSENDERR);
893   - }
894   - free(buf);
895   - xdr_destroy(&xdrs);
896   -
897   -/* Get reply header */
898   - buf = (caddr_t)malloc(REPLYLENGTH);
899   - if((cc = ReceiveFromNet(buf, REPLYLENGTH)) < 0)
900   - {
901   - perror("DD_AddDataSet:");
902   - free(buf);
903   - return(REPLYRECERR);
904   - }
905   -
906   - xdrmem_create(&xdrs, buf, REPLYLENGTH, XDR_DECODE);
907   - xdr_int(&xdrs,&Err);
908   -
909   - if(CloseFlag) // Close everything if function established connection
910   - {
911   - shutdown(SocketID,2);
912   - close(SocketID);
913   - SocketID = -1;
914   -/* Session with DD Server was closed, but User Session continues !!!!! */
915   - /* UserHost[0] = '\0';
916   - UserName[0] = '\0'; */
917   - }
918   - return Err;
919   -}
920   -/*-----------------------------------------------------------------------------*/
921   -
922   -/*---------------------- DD GET VERSION ---------------------------------------*/
923   -char *DD_GetVersion()
924   -/*
925   - * return static pointer to internal string with the DDLIB-SERVER package version
926   - */
927   -{
928   - static char Version[] = VERSION;
929   - return (char *)Version;
930   -}
931   -/*------------------------- End Library -------------------------------*/
src/CLIENT/DD_time.c deleted
... ... @@ -1,321 +0,0 @@
1   -/* ===================================================================
2   - * Name : DD_time.c
3   - * Version: : 4.1
4   - * Author : Andrey Fedorov
5   - * Institution : IRAP/UPS/CNRS Toulouse
6   - * Modifications list:
7   - * Oct 5, 2002: V.3.0, New functions DD_Time2Double and Double2DD_Time were added.
8   - * March 26, 2010: V.3.1 YEARS up to 2025
9   - * May 17, 2011: V.4.0 Fedorov, completely revised version.
10   - * There is no more confuse between Time and Time Interval
11   - * Sept 05, 2011: V.4.1 SetIntNew => arg TimeKind => to work with 1970-1973 : BR
12   - *==================================================================*/
13   -
14   -#include "DD_time.h"
15   -#include <stdio.h>
16   -#include <string.h>
17   -#include <stdarg.h>
18   -
19   -#define YEARS 56
20   -#define STARTYEAR 1970
21   -
22   -/*---- Static array of days shift from Jan-1-1970 -------*/
23   -/* 1970 1971 1972 1973 1974 1975 1976
24   - * 1977 1978 1979 1980 1981 1982 1983
25   - * 1984 1985 1986 1987 1988 1989 1990
26   - * 1991 1992 1993 1994 1995 1996 1997
27   - * 1998 1999 2000 2001 2002 2003 2004
28   - * 2005 2006 2007 2008 2009 2010 2011
29   - * 2012 2013 2014 2015 2016 2017 2018
30   - * 2019 2020 2021 2022 2023 2024 2025
31   - */
32   -static double
33   - YearDays[YEARS] = { 0.0, 365.0, 730.0, 1096.0, 1461.0, 1826.0, 2191.0,
34   - 2557.0, 2922.0, 3287.0, 3652.0, 4018.0, 4383.0, 4748.0,
35   - 5113.0, 5479.0, 5844.0, 6209.0, 6574.0, 6940.0, 7305.0,
36   - 7670.0, 8035.0, 8401.0, 8766.0, 9131.0, 9496.0, 9862.0,
37   - 10227.0, 10592.0, 10957.0, 11323.0, 11688.0, 12053.0, 12418.0,
38   - 12784.0, 13149.0, 13514.0, 13879.0, 14245.0, 14610.0, 14975.0,
39   - 15340.0, 15706.0, 16071.0, 16436.0, 16801.0, 17167.0, 17532.0,
40   - 17897.0, 18262.0, 18628.0, 18993.0, 19358.0, 19723.0, 20089.0};
41   -
42   -/*-------------------------------------------------------------
43   - * DAY_OF_YEAR = monthday[*][month-1]+day_of_month -1
44   - *------------------------------------------------------------*/
45   -static int monthday[2][12] =
46   -{
47   -{0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334},
48   -{0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335}
49   -};
50   -
51   -/*------------------------------------------------------------
52   - * Global static Flag to show the current state of the time
53   - * processor. Is it Time interval (0), or DD Time (1)
54   - *----------------------------------------------------------*/
55   -static int TimeFlag = 1;
56   -/*================== INTERNAL FUNCTION ====================*/
57   -/*-------------------- SetInt ----------------------------*/
58   -void SetInt(dd_tmstr_t *UT)
59   -{
60   - SetIntNew(UT,DD_TM_UNKNOWN);
61   -}
62   -
63   -void SetIntNew(dd_tmstr_t *UT,t_DDTimeKind timeKind) /* Fill int values of dd_tmstr_t */
64   -/* If the double times field of UT structure is defined,
65   - * this function fills remains fields of Year, day .... separately
66   - */
67   -{
68   - static double msofday = 24.0*60.0*60.0;
69   - static double msofhour = 60.0*60.0;
70   - static double msofmin = 60.0;
71   - long daynumber;
72   - double msrest;
73   - int i;
74   -
75   - daynumber = (long)(UT->times / msofday);
76   - for(i=0;i<YEARS;i++) if(daynumber < (long)YearDays[i]) break;
77   - i--;
78   -
79   - switch(timeKind)
80   - {
81   - case DD_TM_DATE :
82   - {
83   - //it's a date
84   - UT->year = i+1970;
85   - UT->day = (int)(daynumber - (long)YearDays[i]);
86   - break;
87   - }
88   - case DD_TM_TIME_INTERVAL :
89   - {
90   - //it's a time interval
91   - UT->year = 0;
92   - UT->day = (int)(daynumber);
93   - break;
94   - }
95   - default :
96   - //compatibility mode
97   - if(i > 3)
98   - {
99   - UT->year = i+1970;
100   - UT->day = (int)(daynumber - (long)YearDays[i]);
101   - }
102   - else
103   - {
104   - UT->year = 0;
105   - UT->day = (int)(daynumber);
106   - }
107   - break;
108   - }
109   -
110   - msrest = UT->times - (double)daynumber * msofday;
111   - UT->hour = (int)(msrest / msofhour);
112   - msrest -= (double)(UT->hour)*msofhour;
113   - UT->min = (int)(msrest / msofmin);
114   - msrest -= (double)(UT->min)*msofmin;
115   - UT->sec = (int)(msrest);
116   - UT->msec = (int)((msrest - (double)(UT->sec))*1000.0);
117   - return;
118   -}
119   -
120   -/*---------------- end of SetInt -----------------------*/
121   -
122   -/*-------------------------------------------------------
123   - * SetDouble()
124   - * Returns the double value of seconds since 1 Jan 1970
125   - * The calculations are made from already filled dd_tmstr_t.
126   - * If UT->year
127   - *------------------------------------------------------*/
128   -void SetDouble(dd_tmstr_t *UT)
129   -{
130   - static double SecInMls = 1.0/1000.0;
131   - static double SecImMin = 60.0;
132   - static double SecInHour = 60.0*60.0;
133   - static double SecInDay = 60.0*60.0*24.0;
134   - if(UT->year >= STARTYEAR) // This is DD Time !
135   - UT->times = (double)UT->msec*SecInMls +
136   - (double)UT->sec +
137   - (double)UT->min*SecImMin +
138   - (double)UT->hour*SecInHour +
139   - (double)UT->day*SecInDay +
140   - YearDays[(UT->year - 1970)]*SecInDay;
141   - else if(UT->year < STARTYEAR) // This is Time Interval
142   - UT->times = (double)UT->msec*SecInMls +
143   - (double)UT->sec +
144   - (double)UT->min*SecImMin +
145   - (double)UT->hour*SecInHour +
146   - (double)UT->day*SecInDay +
147   - YearDays[UT->year]*SecInDay;
148   - else
149   - UT->times = 0.0;
150   - return;
151   -}
152   -/*----------------- end of SetDouble ---------------------*/
153   -
154   -/*=================== PUBLIC FUNCTIONS ==================*/
155   -/*------------------- DD_Time2Double --------------------*/
156   -double DD_Time2Double(dd_time_t UTstring)
157   -{
158   - static dd_tmstr_t UT;
159   - static char year[5] = "0000\0";
160   - static char day[4] = "000\0";
161   - static char hour[3]= "00\0";
162   - static char min[3] = "00\0";
163   - static char sec[3]= "00\0";
164   - static char msec[4] = "000\0";
165   -
166   - strncpy(year,UTstring,4);
167   - strncpy(day,UTstring+4,3);
168   - strncpy(hour,UTstring+7,2);
169   - strncpy(min,UTstring+9,2);
170   - strncpy(sec,UTstring+11,2);
171   - strncpy(msec,UTstring+13,3);
172   -
173   - sscanf(year,"%d",&(UT.year));
174   - sscanf(day,"%d",&(UT.day));
175   - sscanf(min,"%d",&(UT.min));
176   - sscanf(hour,"%d",&(UT.hour));
177   - sscanf(sec,"%d",&(UT.sec));
178   - sscanf(msec,"%d",&(UT.msec));
179   - if(UT.year < STARTYEAR) TimeFlag = 0; // Time Inetrval
180   -
181   - SetDouble(&UT);
182   - return UT.times;
183   -}
184   -/*------------------------------------------------------*/
185   -
186   -/*------------------- Double2DD_Time ---------------------*/
187   - char *Double2DD_Time(double Time)
188   - {
189   - static dd_time_t UTstring;
190   - dd_tmstr_t UT;
191   -
192   - UT.times = Time;
193   - SetInt(&UT);
194   - sprintf(UTstring,"%04d%03d%02d%02d%02d%03d",(UT.year),(UT.day),(UT.hour), (UT.min), (UT.sec),(UT.msec));
195   - return &(UTstring[0]);
196   - }
197   -/*------------------------------------------------------------*/
198   -
199   -/*================== BACKUP COMPABILITY FUNCTIONS =================*/
200   -/*-----------------------------------------------------------------
201   - * ReadTime()
202   - * Reads a standard DD time string as an argument
203   - * and converts it into dd_tmstr_t structure.
204   - * Function returns the pointer to the internal startic structure dd_tmstr_t.
205   - * Function redefines TimeFlag.
206   - *----------------------------------------------------------------*/
207   -dd_tmstr_t *ReadTime(char *UTstring)
208   -{
209   - static dd_tmstr_t UT;
210   - static char year[5] = "0000\0";
211   - static char day[4] = "000\0";
212   - static char hour[3]= "00\0";
213   - static char min[3] = "00\0";
214   - static char sec[3]= "00\0";
215   - static char msec[4] = "000\0";
216   -
217   - strncpy(year,UTstring,4);
218   - strncpy(day,UTstring+4,3);
219   - strncpy(hour,UTstring+7,2);
220   - strncpy(min,UTstring+9,2);
221   - strncpy(sec,UTstring+11,2);
222   - strncpy(msec,UTstring+13,3);
223   -
224   - sscanf(year,"%d",&(UT.year));
225   - sscanf(day,"%d",&(UT.day));
226   - sscanf(min,"%d",&(UT.min));
227   - sscanf(hour,"%d",&(UT.hour));
228   - sscanf(sec,"%d",&(UT.sec));
229   - sscanf(msec,"%d",&(UT.msec));
230   -
231   - if(UT.year < STARTYEAR) TimeFlag = 0; // Time Inetrval
232   -
233   - SetDouble(&UT);
234   - return(&UT);
235   -}
236   -/*-------------------- end of ReadTime ------------------------*/
237   -
238   -/*---------------------- Write Time ---------------------------*/
239   -/* Function Write time convert use only double times field
240   - * of dd_tmstr_t structure to print time in DD style
241   - * in internal static string. The integer fields redefined.
242   - * Function return string pointer.
243   - */
244   -
245   -char *WriteTime(dd_tmstr_t *UT)
246   -{
247   - static dd_time_t UTstring;
248   -
249   - SetInt(UT);
250   - sprintf(UTstring,"%04d%03d%02d%02d%02d%03d",(UT->year),(UT->day),(UT->hour),
251   - (UT->min), (UT->sec),(UT->msec));
252   - return(UTstring);
253   -}
254   -/*------------------- end of WriteTime -------------------*/
255   -
256   -void WriteFmtTime(dd_tmstr_t *UT,char *UTstring)
257   -{
258   - SetInt(UT);
259   - sprintf(UTstring,"%04d:%03d:%02d:%02d:%02d",(UT->year),(UT->day),(UT->hour),
260   - (UT->min), (UT->sec));
261   -}
262   -/*------------------- end of WriteFmtTime -------------------*/
263   -
264   -/*=========================================================
265   - * Functions for DECODERs
266   - * These functions make conversion from/to DD double/DD_time_structure and
267   - * a integer array as follows:
268   - * {Year, Month, Day_Of_Month, Hour, Min, Sec, Mls}
269   - *========================================================*/
270   -/*--------------------------------------------------------
271   - * UT2double()
272   - * Fille the DD_time_structure with double fild from the
273   - * integer array (see the section header)
274   - *-------------------------------------------------------*/
275   -dd_tmstr_t *UT2double(unsigned *ut)
276   -/* Fill the standard structure with double too using as
277   - * argument 7 int length array in Gavrilova Passport Standard
278   - */
279   -{
280   -static dd_tmstr_t UT;
281   -int visocos;
282   -
283   -if(ut[0]%4 == 0) visocos = 1; else visocos = 0;
284   -UT.year = ut[0];
285   -UT.day = monthday[visocos][ut[1] - 1]+ut[2] - 1;
286   -UT.hour = ut[3];
287   -UT.min = ut[4];
288   -UT.sec = ut[5];
289   -UT.msec = ut[6];
290   -
291   -SetDouble(&UT);
292   -return(&UT);
293   -}
294   -/*-------------------------------------------------------*/
295   -/*-------------------------------------------------------
296   - * Double2UT()
297   - * Converts Standard DD double time to interger array (see
298   - * the section header)
299   - *--------------------------------------------------------*/
300   -unsigned *Double2UT(double t)
301   -{
302   - static unsigned UT[7];
303   - dd_tmstr_t tm;
304   - int i,visocos;
305   -
306   - tm.times = t;
307   - SetInt(&tm);
308   - if(tm.year % 4 == 0) visocos = 1; else visocos = 0;
309   - i = 0;
310   - while((i < 12) && (tm.day >= monthday[visocos][i])) i++;
311   - UT[0] = tm.year;
312   - UT[1] = i;
313   - UT[2] = tm.day +1 - monthday[visocos][i-1];
314   - UT[3] = tm.hour;
315   - UT[4] = tm.min;
316   - UT[5] = tm.sec;
317   - UT[6] = tm.msec;
318   -
319   - return( (unsigned *)UT);
320   -}
321   -/*=======================================================================*/
src/DECODERS/ascii2nc/CMakeLists.txt
... ... @@ -2,7 +2,7 @@
2 2 PROJECT(ascii2nc)
3 3  
4 4 include_directories(
5   - ${CMAKE_HOME_DIRECTORY}/src/INCLUDE/
  5 + ${DDCLIENTINCLUDE_DIR}
6 6 ${NETCDFINCLUDE_DIR}
7 7 )
8 8  
... ... @@ -17,7 +17,7 @@ ADD_EXECUTABLE (ascii2nc ${source_files} )
17 17  
18 18 target_link_libraries(
19 19 ascii2nc
20   - DD_Client
  20 + ${DDCLIENTLIBRARY}
21 21 ${NETCDFLIBRARY}
22 22 )
23 23  
... ...
src/DECODERS/cdf2nc/CMakeLists.txt
... ... @@ -2,7 +2,7 @@
2 2 PROJECT(cdf2nc)
3 3  
4 4 include_directories(
5   - ${CMAKE_HOME_DIRECTORY}/src/INCLUDE/
  5 + ${DDCLIENTINCLUDE_DIR}
6 6 ${NETCDFINCLUDE_DIR}
7 7 ${libcdf_INCLUDE_DIR}
8 8 )
... ... @@ -18,7 +18,7 @@ ADD_EXECUTABLE (cdf2nc ${source_files} )
18 18  
19 19 target_link_libraries(
20 20 cdf2nc
21   - DD_Client
  21 + ${DDCLIENTLIBRARY}
22 22 ${NETCDFLIBRARY}
23 23 ${libcdf_LIBRARIES}
24 24 )
... ...
src/DECODERS/nc2nc/CMakeLists.txt
... ... @@ -2,7 +2,7 @@
2 2 PROJECT(nc2nc)
3 3  
4 4 include_directories(
5   - ${CMAKE_HOME_DIRECTORY}/src/INCLUDE/
  5 + ${DDCLIENTINCLUDE_DIR}
6 6 ${NETCDFINCLUDE_DIR}
7 7 )
8 8  
... ... @@ -17,7 +17,7 @@ ADD_EXECUTABLE (nc2nc ${source_files} )
17 17  
18 18 target_link_libraries(
19 19 nc2nc
20   - DD_Client
  20 + ${DDCLIENTLIBRARY}
21 21 ${NETCDFLIBRARY}
22 22 )
23 23  
... ...
src/DECODERS/themis/esa2nc/CMakeLists.txt
... ... @@ -2,7 +2,7 @@
2 2 PROJECT(themis_esa2nc)
3 3  
4 4 include_directories(
5   - ${CMAKE_HOME_DIRECTORY}/src/INCLUDE/
  5 + ${DDCLIENTINCLUDE_DIR}
6 6 ${NETCDFINCLUDE_DIR}
7 7 ${libcdf_INCLUDE_DIR}
8 8 )
... ... @@ -18,7 +18,7 @@ ADD_EXECUTABLE (themis_esa2nc ${source_files} )
18 18  
19 19 target_link_libraries(
20 20 themis_esa2nc
21   - DD_Client
  21 + ${DDCLIENTLIBRARY}
22 22 ${NETCDFLIBRARY}
23 23 ${libcdf_LIBRARIES}
24 24 )
... ...
src/DECODERS/themis/esafull2nc/CMakeLists.txt
... ... @@ -2,7 +2,7 @@
2 2 PROJECT(themis_esafull2nc)
3 3  
4 4 include_directories(
5   - ${CMAKE_HOME_DIRECTORY}/src/INCLUDE/
  5 + ${DDCLIENTINCLUDE_DIR}
6 6 ${NETCDFINCLUDE_DIR}
7 7 ${libcdf_INCLUDE_DIR}
8 8 )
... ... @@ -18,7 +18,7 @@ ADD_EXECUTABLE (themis_esafull2nc ${source_files} )
18 18  
19 19 target_link_libraries(
20 20 themis_esafull2nc
21   - DD_Client
  21 + ${DDCLIENTLIBRARY}
22 22 ${NETCDFLIBRARY}
23 23 ${libcdf_LIBRARIES}
24 24 )
... ...
src/DECODERS/themis/esamom2nc/CMakeLists.txt
... ... @@ -2,7 +2,7 @@
2 2 PROJECT(themis_esamom2nc)
3 3  
4 4 include_directories(
5   - ${CMAKE_HOME_DIRECTORY}/src/INCLUDE/
  5 + ${DDCLIENTINCLUDE_DIR}
6 6 ${NETCDFINCLUDE_DIR}
7 7 ${libcdf_INCLUDE_DIR}
8 8 )
... ... @@ -18,7 +18,7 @@ ADD_EXECUTABLE (themis_esamom2nc ${source_files} )
18 18  
19 19 target_link_libraries(
20 20 themis_esamom2nc
21   - DD_Client
  21 + ${DDCLIENTLIBRARY}
22 22 ${NETCDFLIBRARY}
23 23 ${libcdf_LIBRARIES}
24 24 )
... ...
src/DECODERS/themis/fgm2nc/CMakeLists.txt
... ... @@ -2,7 +2,7 @@
2 2 PROJECT(themis_fgm2nc)
3 3  
4 4 include_directories(
5   - ${CMAKE_HOME_DIRECTORY}/src/INCLUDE/
  5 + ${DDCLIENTINCLUDE_DIR}
6 6 ${NETCDFINCLUDE_DIR}
7 7 ${libcdf_INCLUDE_DIR}
8 8 )
... ... @@ -18,7 +18,7 @@ ADD_EXECUTABLE (themis_fgm2nc ${source_files} )
18 18  
19 19 target_link_libraries(
20 20 themis_fgm2nc
21   - DD_Client
  21 + ${DDCLIENTLIBRARY}
22 22 ${NETCDFLIBRARY}
23 23 ${libcdf_LIBRARIES}
24 24 )
... ...
src/DECODERS/themis/sst2nc/CMakeLists.txt
... ... @@ -2,7 +2,7 @@
2 2 PROJECT(themis_sst2nc)
3 3  
4 4 include_directories(
5   - ${CMAKE_HOME_DIRECTORY}/src/INCLUDE/
  5 + ${DDCLIENTINCLUDE_DIR}
6 6 ${NETCDFINCLUDE_DIR}
7 7 ${libcdf_INCLUDE_DIR}
8 8 )
... ... @@ -18,7 +18,7 @@ ADD_EXECUTABLE (themis_sst2nc ${source_files} )
18 18  
19 19 target_link_libraries(
20 20 themis_sst2nc
21   - DD_Client
  21 + ${DDCLIENTLIBRARY}
22 22 ${NETCDFLIBRARY}
23 23 ${libcdf_LIBRARIES}
24 24 )
... ...
src/INCLUDE/DD.h deleted
... ... @@ -1,143 +0,0 @@
1   -/*=================================================================================================
2   - * DD SYSTEM
3   - * DD.h
4   - * Version: 6.0
5   - * Description: The public header to use DD library libDD.a
6   - * List of changes:
7   - * Apr. 17, 2002 Fedorov, - New error constant to interrupt the
8   - * transmission if data dimensions are changed from file
9   - * to file
10   - * Nov 18, 2004 - V.4.2 - Fedorov, New errors for CACH manipulating
11   - * Jun 17, 2007 - V.4.6 Fedorov New requestes and external executables
12   - * Aug 02, 2007 - V.4.7 Fedorov Modification of call external executables
13   - * Sep 24, 2007 - V.5.0 Fedorov New status of Get Data: MOREDELAY
14   - * May 21, 2008 - V.5.1 Fedorov New Status of SetTime: CTIMEISSHIFTED
15   - * Oct 18, 2012 - V.5.2 Knizhnikova New DD_SetTimeInfo() function
16   - *=================================================================================================*/
17   -
18   -#include "DD_time.h"
19   -
20   -typedef struct { int type; /* Type of variable in netcdf style */
21   - int DimNumber; /* number of dimensions */
22   - int *Dimensions; /* Dimensions array
23   - * fastest change is last */
24   - int VarNumber; /* Dimension of variable array */
25   - void **Variables;/* Variables array pointer
26   - * It is static array refreshed
27   - * each call
28   - */
29   - } DD_data_t;
30   -
31   -/*------------------- FUNCTIONS ---------------------------*/
32   -
33   -#ifdef __cplusplus
34   -extern "C" {
35   -#endif
36   -
37   -extern int DD_SetVariable(char *VarName);
38   -/*
39   - * VarName - full name of variable <project>:<instrument>:<Variable>
40   - * Returns VarID or negative in case of error (see bellow)
41   - */
42   -
43   -extern int DD_GetInform(int VarID,char *AttrName, DD_data_t **data);
44   -/*
45   - * VarID - Variable ID from DD_SetVariable
46   - * AttrName - name of attribute ( defined by konvention )
47   - * data - address of data structure
48   - * Returns 1 if OK and negative value in case of error (see bellow)
49   - */
50   -
51   -extern int DD_SetTime(int VarID, char *Time);
52   -/*
53   - * VarID - Variable ID from DD_SetVariable
54   - * Time - string defined in DD_time.h
55   - * Returns 1 if OK and negative value in case of error (see bellow)
56   - */
57   -
58   -extern int DD_SetTimeInfo(int VarID, char *Time, double *RealTime);
59   -/*
60   - * VarID - Variable ID from DD_SetVariable
61   - * Time - string defined in DD_time.h
62   - * RealTime - time pointer was set to
63   - * Returns 1 if OK and negative value in case of error (see bellow)
64   - */
65   -
66   -extern int DD_GetMultiData(int VarID, size_t VarSize, char **VarNames, char *TimeInt, DD_data_t **data, int BackFlag);
67   -/*
68   - * VarID - Variable ID from DD_SetVariable
69   - * VarSize - number of variables to return
70   - * VarNames - the array of Names of the requested Variable
71   - * TimeInt - String of Time interval in DD_time style
72   - * data - Data structures array
73   - * BackFlag - 0 - pointer is at the lasy position, 1 - pointer returns to the start point
74   - * Returns 1 if OK and negative value in case of error (see bellow)
75   - */
76   -
77   -/* ----------------------------------------
78   - * This function below just call DD_GetMultiData
79   - * for backup
80   - *---------------------------------------*/
81   -extern int DD_GetData(int VarID, char *VarName, char *TimeInt, DD_data_t **data);
82   -
83   -extern int DD_MovePoint(int VarID, int RecordNumber);
84   -/*
85   - * VarID - Open virtual instrument ID
86   - * int RecordNumber - +/- records to move
87   - * Move pointer in the open instrument and return 1 or negative if error
88   - */
89   -
90   -extern int DD_Close(int VarID);
91   -/*
92   - * VarID - Variable ID from DD_SetVariable
93   - * Returns 1 if OK and negative value in case of error (see bellow)
94   - */
95   -
96   -extern char *DD_GetVersion();
97   -/*
98   - * return static pointer to internal string with the DDLIB-SERVER package version
99   - */
100   -
101   -/*----------- Data Update functions -----------------------------------*/
102   -extern int DD_AddDataSet(char *DataSetName, char *RemSetID, char *BaseName);
103   -/*
104   - * Request for new VI. See ../DOC/TECHDOC/DDServFunct.html
105   - */
106   -
107   -#ifdef __cplusplus
108   -}
109   -#endif
110   -
111   -/*--------------------- CONSTANTS -----------------------------------------*/
112   -#define MOREDATA 1 /* There is data, but we have to call GetData again right now*/
113   -#define MOREDELAY 2 /* There is data, but we have to call GetData again after delay */
114   -#define OK 0 /* It is last data packet */
115   -#define NOCONNECTION -1
116   -#define TOOMANYREQ -2
117   -#define REQSENDERR -3
118   -#define REPLYRECERR -4
119   -#define NOID -5
120   -#define NOREFFILE -6
121   -#define NOTIMESFILE -7
122   -#define NOINFOFILE -8
123   -#define NOVAR -9
124   -#define OUTOFTIME -10
125   -#define CACHERR -11 /* The error occured when program manipulated the cach */
126   -#define CACHTOOREC -33 /* Off files in the CASH are created less then 5 sec ago */
127   -#define WAITEXTCALL -34 /* Server Waits external call finish */
128   -#define TRYAGAIN -35 /* Times file is locked. This request should be repeated again */
129   -#define NODATAATTIME -36 /* Requested time is inside NODATA time interval */
130   -#define GAPISSMALL -37 /* Gap is too small to call external archive */
131   -#define CTIMEISSHIFTED -38 /* The request was in NoData interval, try again with time at the end */
132   -#define DATAFILEERR -12 /* The error while manipulate with data file */
133   -#define ENVIRERROR -13 /* Error in Environments */
134   -#define NOPOINTER -14 /* The pointer points nowhere, SetTime were failed */
135   -#define INTSERERR -15 /* Server internal error */
136   -#define TIMEINEMPTY -16 /* No data for specified time interval */
137   -#define NOEXEC -17 /* No executable */
138   -
139   -#define DD_SHORT 4
140   -#define DD_INT 1
141   -#define DD_FLOAT 2
142   -#define DD_DOUBLE 3
143   -#define DD_CHAR 0
src/INCLUDE/DD_Access.h deleted
... ... @@ -1,93 +0,0 @@
1   -/* ======================================================
2   - *
3   - * DD_Access.h
4   - * V.2.0
5   - * Last revision: Oct 7, 2002
6   - * List of revisions: 1997 - version 1.0
7   - * Oct 7, 2002 - version 2.0 (update a little )
8   - */
9   -
10   -#define MAXHOSTLENGTH 16 /* IP-address: "255.255.255.255\0" */
11   -#define USRLENGTH 21 /* Length of UserName: + \0 */
12   -#define TICKETLENGTH 9 /* Length of passwd: 8 + \0 */
13   -#define HOSTNAMELENGTH 120 /* Length of the user host name */
14   -#define USERCASHLEN 100 /* Size of user_ticket.nc file must be 300 */
15   -#define NONAME "no_name\0" /* Name of user in case of non-WEB connection */
16   -#define ACCINSTR "iball:acc:all" /* Instrument which watch the access */
17   -#define TICKET_PATH "/ACC/user_ticket.nc"
18   -#define USERREFNAME "/ACC/user_info.nc"
19   -#define LOGFILE "/ACC/login.log"
20   -
21   -/*------------ Errors of ACCESS ---------------------*/
22   -#define NOPERMISSION -100
23   -#define NOHOST -101
24   -#define NOUSERSFILE -102
25   -
26   -/*--------------- Extern global variables -------------------*/
27   -extern char UserName[USRLENGTH]; /* defined in DD_client.c */
28   -extern char UserHost[MAXHOSTLENGTH]; /* defined in DD_client.c */
29   -extern int UserID; /* defined in DD_client.c */
30   -
31   -/*--------------- Extern Functions ---------------------------*/
32   -extern int FillStruct (int argc, void **argv);
33   -/* This function used to set up the host address from IDL (when WWW access used)
34   - * Arguments allocation is as follows:
35   - * UserName - 0
36   - * UserHost - 1
37   - * Location: DD_idl.c -> DD_idl.so
38   -*/
39   -
40   -extern int GetTicket(int UID, char *HostName, int DD_user_id);
41   -/* Description: This function find the user data in user_cash.nc
42   - * If O'k rewrite the line with new time.
43   - * In case of a new user, remove the first line with
44   - * older time data then a current time + 4.5 hours.
45   - *
46   - Takes 3 arguments: UserId (id in the romote host)
47   - Remote host address(string,like "193.232.6.60\0")
48   - DD_user_id(can see in user_info.nc)
49   -
50   - Returns 0 if O'k or NOPERMISSIONS, or ERROR
51   -
52   - If DD_log_name equal NULL searching for UserId, IP-address
53   - If DD_log_name nonequal NULL searching for IP-address,DD_log_name*
54   - *
55   - */
56   -extern int CheckTicket(char *NameUsr, char *Ticket);
57   -/* Description: This function check if user exosts
58   - * in user_info.nc file. Returns DD_id if O'k.
59   - * It returns NOPERMISSION or other errors
60   - */
61   -
62   -extern int ShowTicket(int userid, char *hostname, char *DD_name);
63   -/*
64   - * Show if user has authorisation to work
65   - */
66   -
67   -extern int LoginRequest(char *UserPasswd, char *UserLogin, char *HostName);
68   -/* Description: Library function for client-server using.
69   - * Send ID, Password,UserLogin, and host to server.
70   - * Compares the information with your {id,hostname and other}.
71   - * Returns 0 if O'k, or a negative value in case
72   - * of "NOPERMISSION" or error.
73   - *
74   - */
75   -extern int SetUser(int UserID, char *HostName, char *LogName);
76   -/* Description: Library function for client-server using.
77   - * Send UserID, HostName to server.
78   - * Compares the information with your {id,hostname}.
79   - * Returns 1 if O'k, or a NOPERMISSION, or error number
80   - */
81   -
82   -extern int CheckID(char *NameUsr);
83   -/* Description: This function check the user name in user_info.nc file.
84   - * Returns DD_id if exists.
85   - * It returns NOPERMISSION or other errors
86   - */
87   -
88   -extern void Put2Log(int UID, char *Host, char *LogName, int error);
89   -/* Description: This function logs a user's ID, IP-address of a local host,
90   - * login name and permission information into log file.
91   - *
92   - */
93   -
src/INCLUDE/DD_comm.h deleted
... ... @@ -1,412 +0,0 @@
1   -/*=================================================================================
2   - * DD SYSTEM base package
3   - * DD_Server DD_Client library
4   - * DD_comm.h
5   - * V. 6.0
6   - * Changes listing:
7   - * Feb 27 1995 - V 1.0
8   - * 13 Apr. 2002 - changed for NetCDF 3.3
9   - * 03 Oct. 2002 - v.4.0 Fedorov, communication ideology is changed
10   - * Oct 31, 2002 - V.4.1 Fedorov, UserName, UserHost and UserID transferred into DD_Access.h
11   - * May 7, 2003 - V.4.2 Fedorov, The Cash structure is changed (flag of open file )
12   - * June 17, 2003 - V.4.3 Fedorov, The Maximal Packet Size is changed
13   - * Nov 18, 2004 - V.4.4 Fedorov, Some changes
14   - * Aug 17, 2005 - V.4.5 Fedorov, Cach Time constant is changed
15   - * Jun 17, 2007 - V.4.6 Fedorov, New requestes and external executables
16   - * Aug 01, 2007 - V.4.7 Fedorov, Cache length = 20, New DD_Var_t structure
17   - * Sep 20, 2007 - V.5.0 Fedorov, Update Time Info library now in the separate file
18   - * Sep 23, 2007 - V.5.1 Fedorov, New interface of SetTime
19   - * Sep 25, 2007 - V.5.2 Fedorov, Individual minimal gap
20   - * Oct 08, 2007 - V.5.3 Budnik, php createVI.php <baseID> <remSetID> <ddSetID>
21   - * Jan 25, 2008 - V.5.3.1 Budnik, min data gap = 1 day!!!!
22   - * May 22, 2008 - V.5.4 Fedorov, DD_Var_t has a LockStartTime value
23   - * May 27, 2008 - V.5.5 Fedorov, Maximal tracnsmition buffer
24   - * Sep 19, 2008 - V.5.6 MAXVARLENGTH=64 REQUESTLENGTH 184
25   - * Dec 15, 2012 - V.6.0 New multiparam Get_MultiData() function
26   - *===================================================================================*/
27   -
28   -#include <stdio.h>
29   -#include <sys/errno.h>
30   -#include <stdlib.h>
31   -#include <string.h>
32   -#include <sys/types.h>
33   -#include <sys/time.h>
34   -#include <time.h>
35   -#include "DD_Access.h"
36   -
37   -#ifdef SOLARIS
38   -#include <sys/socket.h>
39   -#include <netdb.h>
40   -#include <netinet/in.h> /* internet stile addres */
41   -#include <rpc/types.h>
42   -#include <rpc/xdr.h>
43   -#include <rpc/rpc.h>
44   -#endif /* SOLARIS */
45   -
46   -#ifdef HPUX
47   -#include <sys/socket.h>
48   -#include <netinet/in.h>
49   -#include <netdb.h>
50   -#include <sys/un.h>
51   -#include <rpc/xdr.h>
52   -#include <rpc/rpc.h>
53   -#endif
54   -
55   -#ifdef OSF1
56   -#include <sys/socket.h>
57   -#include <netdb.h>
58   -#include <arpa/inet.h>
59   -#include <rpc/xdr.h>
60   -#endif /* OSF1 */
61   -
62   -#ifdef LINUX
63   -#include <sys/socket.h>
64   -#include <netinet/in.h>
65   -#include <netdb.h>
66   -#include <rpc/rpc.h>
67   -#include <rpc/xdr.h>
68   -#endif /* LINUX */
69   -
70   -#ifdef SUNOS
71   -#include <sys/socket.h>
72   -#include <sys/socketvar.h>
73   -#include <netinet/in.h>
74   -#include <netdb.h>
75   -#include <rpc/xdr.h>
76   -#endif /* SUNOS */
77   -
78   -/*----------------- Defenitions of request and server replies --------------------*/
79   -/* 1. Data manipulation requests */
80   -#define OPENINSREQ 0 /* Open virtual instrument */
81   -#define DATAINFOREQ 1 /* Request of constant info */
82   -#define TIMESETREQ 2 /* Position of pointer by StartTime*/
83   -#define DATAGETREQ 3 /* Data request by time interval */
84   -#define CLOSEINSREQ 4 /* Request to close virtual instrument */
85   -#define MOVPOINTREQ 5 /* Move the pointer od data request*/
86   -#define ADDVIREQ 6 /* Add New virtual instrument */
87   -
88   -/* 2. Security requests */
89   -#define GETTICKETREQ 10
90   -#define SHOWTICKETREQ 11
91   -
92   -/*-------- Some constants ------------------*/
93   -#define EMPTY 0 /* Filler of the trailer */
94   -#define FILEACCMARG 1 /* The minimum time from the last access to remove this file */
95   -
96   -/*------------ Important lengths and pathes ----------------*/
97   -#define PROTOCOL 0 /* protocol TCP */
98   -#define REPLYLENGTH 12 /* Length of header of reply packet */
99   -#define REQUESTLENGTH 196 /* Length of request packets MAXSETLENGTH + 2*MAXVARLENGTH + 16 */
100   -#define MAXVARLENGTH 64 /* Length (with \0) of Variable Name */
101   -#define MAXSETLENGTH 52 /* Max Length of VI name */
102   -#define PATHLENGTH 128 /* Length of complete path */
103   -#define MAXFILENAME 32 /* The maximal length of the data file (info, cach, times as well)*/
104   -#define REFNAME "/refer.nc" /* path name for databse refer file */
105   -#define CASHLEN 20 /* Length of cash array */
106   -#define TRY 100 /* How many tymes to ask the socket */
107   -#define MAXPACKSIZE 5000000 /* Maximal size of one packet of transmission in bytes */
108   -#define MAXCOMMANDL 300 /* Command in system() maximal length
109   -/*-------------------------------------------------
110   - * XDR length to calcolate the total len
111   - *-------------------------------------------------*/
112   -#define XDRINTLEN 4
113   -#define XDRFLOATLEN 4
114   -#define XDRDOUBLELEN 8
115   -// String length is counted as 4B + N + r (to completed to 4 bytes)
116   -
117   -/*------------ List of External Call of DD_Server and ERRORS -------------------*/
118   -#define ADDDATASETCALL "php %s/CALLEXT/createVI.php %s %s %s" /* Format to call to create new VI */
119   -#define GETNEWDATACALL "php %s/CALLEXT/getData%s.php %s %s %s %s &" /* Format to call to get new data */
120   -#define NOPHP 32512
121   -#define NOSCRIPT 256
122   -#define PHPOK 0
123   -
124   -/*------ Constant to understand data availabilities -------------------------------*/
125   -#define GLOBSTARTNAME "GlobalStart"
126   -#define GLOBSTOPNAME "GlobalStop"
127   -#define SAMPLNAME "MinSampling"
128   -#define REMARCHNAME "DataBaseID"
129   -#define REMINSTNAME "DataSetID"
130   -#define MINGAP 86400.0 /*Seconds. The minimal time gap to set up the flag DATAGAP */
131   -#define REQTIMEINT 86400.0 /* One day, +/- of request time interval */
132   -#define ISOTIMEF "%4u%*1c%2u%*1c%2u%*1c%2u%*1c%2u%*1c%2u%*1c%3u" /* Format to READ time in ISO format */
133   -#define ISOTIMEP "%04u-%02u-%02uT%02u:%02u:%02u.%03uZ" /* Format to PRINT time in ISO format */
134   -#define NODATASTR "NODATA"
135   -#define DIRLOCK "LOCK"
136   -
137   -#define QUANTOFFSET 0.01
138   -/*------------- More internal specifications -----------------------*/
139   -/*
140   - * See ../DOC/TECHDOC/DDGenProt.html (lyx)
141   - */
142   -
143   -/* Reply variables:
144   - * Error - negative value described in DD.h
145   - * Type - int (see DD.h)
146   - * Dim_Number - int ( the dimension (vector, matrix, cube, etc) ov the variable)
147   - * Data_Size - int (the size of the data packet in bytes)
148   - * RemID - int (number of virtual instruments still open in this session)
149   - * Dim - int (the particular dimension )
150   - * LastPacketFlag - int ( == OK in this packet is last, or MOREDATA)
151   - * Data - array of Type of Dim X Dim X....X Dim size
152   - * --------------------
153   - * Dim_Number
154   - * DataPacket:
155   - *
156   - * <LastPacketFlag> |
157   - * <Dim> | |
158   - * <.....> | Dim_Number | Data_Size bytes
159   - * <Dim> | |
160   - * <data> |
161   - * ..... | only for real data |
162   - * <data> | |
163   - *
164   - * Note is the value is scalar - the Dim = 0 (???)
165   - */
166   -
167   -/* REPLY SPECIFICATION
168   - *
169   - * Reply consists Header 12 bytes length and Data Block
170   - *
171   - * on Open Virtual instrument:
172   - * <OPENINSREQ><ID/Eroor><EMPTY><EMPTY>
173   - * on Constant Info request:
174   - * <DATAINFOREQ><Type/Error><Dim_Number><Data_Size><DataPacket>
175   - * on Set pointer by StartTime:
176   - * <SETTIMEREQ><EMPTY/Error><EMPTY><EMPTY>
177   - * on Get Data by TimeInt :
178   - * <DATAGETREQ><Type/Error><Dim_Numbers><Data_Size><LastRecordFlag><DataPacket>
179   - * on Move pointer with records number
180   - * <MOVPOINTREQ><EMPTY/Error><EMPTY><EMPTY>
181   - * on Close Virtual Instrument
182   - * <CLOSEINSREQ><RemID/Error><EMPTY><EMPTY>
183   - */
184   -
185   -/*-------------------- TYPEDEF ---------------------------*/
186   -typedef struct {
187   - char CacheFilePath[PATHLENGTH];
188   - char names[CASHLEN][MAXSETLENGTH];
189   - long times[CASHLEN];
190   - int FileOpen[CASHLEN]; /* 1 if file is open */
191   - int ID; /* ID of open cach file */
192   - int nameID; /* ID of names array */
193   - int timeID; /* ID of times array */
194   - int fopenID; /* ID of fopen flag */
195   - } DD_cash_t; /* The structure holding cash informaton
196   - * of particular virtual instrument DataBase
197   - */
198   -
199   -/*
200   - * This structure corresponds to ONE requested variable
201   - * of some Virtual instrument
202   - */
203   -typedef struct { char InstrName[MAXSETLENGTH]; /* Virtual Instrument Name */
204   - char path[PATHLENGTH]; /* Path to directory of open virtual instrument */
205   - /*---------------------------------------
206   - * Cache part
207   - *--------------------------------------*/
208   - DD_cash_t Cash; /* Cash holder */
209   - int CurrCushN; /* Current cash pointer */
210   - /*--------------------------------------
211   - * This is the part of open data file and corresponding data set
212   - *-------------------------------------*/
213   - int ncID; /* ID of open nc_file */
214   - size_t nc_rec; /* the current record number nc_file */
215   - size_t Maxnc_rec; /* Maximum of records number in in the current nc file */
216   - DD_data_t *VarData; /* Static pointer. Variables Holder */
217   - size_t ParamSize; /* Number or requested variables to save */
218   - /*---------------------------------------------
219   - * This is part of times file of given VI
220   - *--------------------------------------------*/
221   - char TimesFileName[PATHLENGTH];
222   - double SDTime; /* Requested Start Time in double form */
223   - double FDTime; /* Requested Stop Time in double form */
224   - double CDTime; /* Current Time in double form */
225   - int tmID; /* ID of "times" file of this virtual instrument*/
226   - int NameID; /* ID of FileName variable in times file */
227   - int StartID; /* ID of Start variable in times file */
228   - int StopID; /* ID of Stop variable in times file */
229   - size_t TimeRecNumber; /* Current Record number in the "times" file */
230   - size_t MaxTimeRecNum; /* Maximum records number in the "times" file */
231   - int RValidMin; /* Minimal record with valid data */
232   - int RValidMax; /* Maximal record with valid data */
233   - double MinValidTime;
234   - double MaxValidTime; /* Start of RValidMin, and stop of RValidMax */
235   - int CurrRmin; /* Sure that looking time is greater than stop; -1 if NOT */
236   - int CurrRmax; /* Sure that looking time is less than start; -1 if NOT */
237   - /*------- Working with external Data Base ------------------------------*/
238   - int VILocked; /* Flag to show that request to remote database has been sent */
239   - time_t LockStartTime; /* Value to calculate a time elapsed from lock made by THIS VI */
240   - /*---------- This is the part of Info file of given VI -----------------*/
241   - int attrID; /* ID of constant information nc_file */
242   - char AttrName[PATHLENGTH]; /* Name of constant information file */
243   - DD_data_t AttrData; /* Dimensions of Attributes */
244   - /*---- Part concerning External call ------------------*/
245   - double MinGap; /* The minimal gap between two files */
246   - double GlobalStart; /* The principal begin of data */
247   - double GlobalStop; /* The principal end of data */
248   - char BaseName[MAXSETLENGTH]; /* The name of external data archive */
249   - char RemSetID[MAXSETLENGTH]; /* The name of VI in exterval archiving */
250   - int ExtCallAllowed; /* 1 If Server can call external archiving */
251   - /*------------ Flow Control -----------------------------*/
252   - int LastPacketFlag; /* OK - request is completed,
253   - * MOREDATA - one or several blocks expected,
254   - * MOREDELAY - wait, system is blocked */
255   - int LastFileStatus; /* The file status after the last SetNewFile */
256   - int NewFile; /* 1 if File was changed, VI has to be refreshed*/
257   - int NewFileWasOpen; /* 1 if the original position of pointer
258   - * (in data file, times file) was lost after open
259   - * a new data file */
260   - } DD_Var_t;
261   -
262   -/*---------------- Usefull enumerations ---------------------*/
263   -enum SearchRet {REACHLEFT, REACHRIGHT, OKLEFT, OKRIGHT};
264   - /*
265   - * enumerate of the status of time inteval searching
266   - * NOONEDATA - no data at al in this VI
267   - * INSIDE - CTime is inside valid data interval (tolerance is MINGAP)
268   - * DATAATRIGHT, DATAATLEFT - Valid interval is on the right/left from CTime
269   - */
270   -enum SearchIntRet {NOONEDATA, INSIDE, DATAATRIGHT, DATAATLEFT, IDLE};
271   -
272   -/* Return function IsTimesLocked */
273   -enum LockStatus {NOLOCK, LOCKED, LOCKREMOVED};
274   -
275   -
276   -/*------------------ Function for Server ---------------------*/
277   -extern int OpenInstr(char *InstrName);
278   -
279   -/*
280   - * Init shared memory for cache system
281   - */
282   -extern void Cache_Init();
283   -
284   -/*
285   - * Free shared memory used for cache system
286   - */
287   -extern void Cache_Free();
288   -
289   -/*
290   - * Free shared memory used for cache system
291   - */
292   -extern int Cache_RequestDataFileAccess(DD_Var_t *D, char* dataFileName);
293   -
294   -/*
295   - * Free shared memory used for cache system
296   - */
297   -extern int Cache_ReleaseDataFileAccess(DD_Var_t *D);
298   -
299   -/*
300   - * Close cache file
301   - */
302   -extern int Cache_CloseFile(DD_Var_t *D);
303   -
304   -/*
305   - * Open Virtual instrument by name and returns the ID
306   - * Returns negative value in case of error (see DD.h)or OK
307   - */
308   -extern int GetAttribute(int ID, char *Name);
309   -/*
310   - * Variable - address of structure with variable description
311   - * Name - name of attribute
312   - * Returns OK or an error (see DD.h)
313   - */
314   -extern int GetMultiData(int ID, int VarSize, char **VarNames, char *TimeInterval, int BackFlag);
315   -/*
316   - * VarSize - size of the array of Names
317   - * Names - array of strings with names of requested variables,
318   - * TimeInterval - Time in DD_time.h style
319   - * Returns negative value in case of error (see bellow)
320   - * Returnes MOREDATA if "there is more data", and OK if data is finished.
321   - */
322   -
323   -extern int SetTime(DD_Var_t *D, double CTime);
324   -/*#################################################################
325   - * SET TIME
326   - * Set time and try to open appropriate data file. If not try to
327   - * call external archive
328   - * D - address of VI holder
329   - * Time - Time in DD_time.h style
330   - * Return:
331   - * OK
332   - * NOID - call with uncorrect VI holder
333   - * OUTOFTIME - Requested time is out of General time limitation
334   - * WAITEXTCALL - Server sent request to external archive
335   - * TRYAGAIN - VI is blocked by call to external database
336   - * NODATAATTIME - request time is inside NODATA time interval
337   - * some return of SetNewFile(); see ...
338   - *#################################################################*/
339   -
340   -extern int CloseID(int ID);
341   -/* ID - integer identificator of opened Data Set
342   - * Returns number of remained IDs of this communication seasson
343   - * in case of 0 the server closes this comminication session
344   - */
345   -
346   -int SetNewFile(DD_Var_t *D, int N);
347   -/*
348   - * Function tries to get new data for the gap beetween files, or just
349   - * open a new data file according to offset N referring to current position in the times file.
350   - * The current position changed if file is succesefully open.
351   - * Return values:
352   - * OK
353   - * OUTOFTIME - next interval exceeeds GlobalStart/Stop
354   - * TIMEINEMPTY - next interval marked as "NODATA"
355   - * TRYAGAIN - the VI is blocked while new data is arriving
356   - * WAITEXTCALL - new data is requested
357   - * CACHTOOREC - now free space in the CACH
358   - * CHACHERR - unrecovable error in CACH
359   - * DATAFILEERR - unrecovable error in data file
360   - */
361   -
362   -size_t MaxRecord(int ncID);
363   -/*
364   - * Inspect all variables and dimensions of the file (exept Time associated) and
365   - * returm maximal record number to transmit
366   - */
367   -
368   -/*------------------ Global constants ----------------------------------*/
369   -static u_int xdrlen[] = {4,4,4,8,4};
370   -static size_t unixlen[] = {sizeof(char),sizeof(int),sizeof(float),sizeof(double),sizeof(short)};
371   -static bool_t ( *ConvFunc[5])() = {xdr_char, xdr_int, xdr_float, xdr_double, xdr_short};
372   -
373   -/*------------------ Global data variable for entire session --------------------*/
374   -extern DD_Var_t **DD_Var ; /* Actually this variable is implimented
375   - * in DD_GetData.c . The dimension of this array is defined
376   - * by sysconf(_SC_OPEN_MAX)*/
377   -extern size_t MaxIDNumber; /* Size of DD_Var array. Defined actually in DD_GetData.c */
378   -
379   -/*
380   - * Fuctions prototypes in ExtDataRequest.c file
381   - */
382   -/*======================================================================
383   - * IsTimesLocked
384   - * Return 1 if there is LOCK in the VI directory
385   - *======================================================================*/
386   -extern int IsTimesLocked(DD_Var_t *DD_Var);
387   -
388   -/*======================================================================
389   - * ExtDataRequest
390   - * Return folowing values:
391   - * OK - request is accepted SERVER has to wait when LOCK file is gone
392   - * NOEXEC - error in external executable
393   - * NODATAATTIME - time corresponds to the NODATA interval
394   - * GAPISSMALL - Time is inside too small gap
395   - *======================================================================*/
396   -extern int ExtDataRequest(DD_Var_t *DD_Var, double CurrTime);
397   -
398   -/*=======================================================================
399   - * UpdateTimeInfo.c
400   - * int SearchLeft(DD_Var_t *DD_VarL, size_t Rmin, size_t Rmax)
401   - * int SearchRight(DD_Var_t *DD_VarL, size_t Rmin, size_t Rmax)
402   - * Search the next to the left(right) non-empty time interval
403   - * DD_VarL - common data structure corresponding to THIS open VI
404   - * Rmin, Rmax - start points
405   - *
406   - * int UpdateTimeInfo(DD_Var_t *DD_VarL)
407   - * Function reopen "times" file and update all time constants
408   - *======================================================================*/
409   -extern int SearchLeft(DD_Var_t *DD_VarL, size_t Rmin, size_t Rmax);
410   -extern int SearchRight(DD_Var_t *DD_VarL, size_t Rmin, size_t Rmax);
411   -extern int UpdateTimeInfo(DD_Var_t *DD_VarL);
412   -
src/INCLUDE/DD_time.h deleted
... ... @@ -1,59 +0,0 @@
1   -/* This is header file for working with DD time */
2   -/* V.4.1 */
3   -/* name: DD_time.h
4   - * Author: Andrey Fredorov
5   - * Institution: IKI RAN
6   - * Date: 21-Feb-1995
7   - * Last update Sept 05, 2011
8   - * Sept 05, 2011: V.3.2 SetIntNew => arg TimeKind => to work with 1970-1973 : BR
9   - */
10   -
11   -#define TIMELENGTH 17
12   -
13   -typedef char dd_time_t[TIMELENGTH]; /* YYYYDDDHHMMSSMLS */
14   -
15   -/* ---------------- Functions prototypes ----------------------*/
16   -extern double DD_Time2Double(dd_time_t DD_Time);
17   -/* Convert string to double and return.
18   - * Return negative value in case of error string format
19   - */
20   -extern char *Double2DD_Time(double Time);
21   -/* Convert double Time value into string form and return pointer to static string
22   - * allocated INSIDE the library. Thus the value is renoveted each function call.
23   - */
24   -
25   -/*---------------- Backup compability with V.3.0 and earlier ----------*/
26   -typedef struct { double times; /* time sec from 1970 */
27   - int year;
28   - int day;
29   - int hour;
30   - int min;
31   - int sec;
32   - int msec;
33   - } dd_tmstr_t ;
34   -
35   -
36   -extern dd_tmstr_t *ReadTime(char *UT); /* Read time from sring and fill static
37   - * structure defined IN function.
38   - * Returns pointer of strusture */
39   -extern char *WriteTime(dd_tmstr_t *UT); /* Get pointer of time structure
40   - * and convert it into string
41   - * Function returns pointer of
42   - * internal string */
43   -
44   -extern void WriteFmtTime(dd_tmstr_t *UT,char *UTstring);
45   -
46   -extern void SetDouble(dd_tmstr_t *UT); /* Fill double value of dd_tmstr_t */
47   -
48   -typedef enum {DD_TM_UNKNOWN, DD_TM_TIME_INTERVAL, DD_TM_DATE} t_DDTimeKind;
49   -
50   -extern void SetInt(dd_tmstr_t *UT); /* Fill int values of dd_tmstr_t */
51   -extern void SetIntNew(dd_tmstr_t *UT,t_DDTimeKind timeKind);
52   -
53   -/*------- Functions for DECODERS ------------------------
54   - *These functions works with with Gavrilova's UT representation */
55   -extern dd_tmstr_t *UT2double(unsigned *UT); /* Set standard time
56   - * structure and return
57   - * its pointer
58   - */
59   -extern unsigned *Double2UT(double Time); /*Converts Double to Gavrilova array */
src/SERVER/CMakeLists.txt
... ... @@ -2,8 +2,8 @@
2 2 PROJECT(DD_Server)
3 3  
4 4 include_directories(
5   - ${CMAKE_HOME_DIRECTORY}/src/INCLUDE/
6 5 ${NETCDFINCLUDE_DIR}
  6 + ${DDCLIENTINCLUDE_DIR}
7 7 )
8 8  
9 9 #Configuration de l'exécutable
... ... @@ -18,7 +18,7 @@ ADD_EXECUTABLE (DD_Server ${source_files} )
18 18 target_link_libraries(
19 19 DD_Server
20 20 ${CMAKE_THREAD_LIBS_INIT}
21   - DD_Client
  21 + ${DDCLIENTLIBRARY}
22 22 ${NETCDFLIBRARY}
23 23 ${CRYPT_LIBRARY}
24 24 )
... ...
src/TIMESUPDATE/CMakeLists.txt
... ... @@ -2,7 +2,7 @@
2 2 PROJECT(TimesUpdate)
3 3  
4 4 include_directories(
5   - ${CMAKE_HOME_DIRECTORY}/src/INCLUDE/
  5 + ${DDCLIENTINCLUDE_DIR}
6 6 ${NETCDFINCLUDE_DIR}
7 7 )
8 8  
... ... @@ -17,7 +17,7 @@ ADD_EXECUTABLE (TimesUpdate ${source_files} )
17 17  
18 18 target_link_libraries(
19 19 TimesUpdate
20   - DD_Client
  20 + ${DDCLIENTLIBRARY}
21 21 ${NETCDFLIBRARY}
22 22 )
23 23  
... ...
src/TIMESUPDATENODATA/CMakeLists.txt
... ... @@ -2,7 +2,7 @@
2 2 PROJECT(TimesUpdateNoData)
3 3  
4 4 include_directories(
5   - ${CMAKE_HOME_DIRECTORY}/src/INCLUDE/
  5 + ${DDCLIENTINCLUDE_DIR}
6 6 ${NETCDFINCLUDE_DIR}
7 7 )
8 8  
... ... @@ -17,7 +17,7 @@ ADD_EXECUTABLE (TimesUpdateNoData ${source_files} )
17 17  
18 18 target_link_libraries(
19 19 TimesUpdateNoData
20   - DD_Client
  20 + ${DDCLIENTLIBRARY}
21 21 ${NETCDFLIBRARY}
22 22 )
23 23  
... ...
tests/CMakeLists.txt
... ... @@ -2,7 +2,7 @@
2 2 PROJECT(testParallel)
3 3  
4 4 include_directories(
5   - ${CMAKE_HOME_DIRECTORY}/src/INCLUDE/
  5 + ${DDCLIENTINCLUDE_DIR}
6 6 )
7 7  
8 8 #Configuration de l'exécutable
... ... @@ -17,7 +17,7 @@ ADD_EXECUTABLE (testParallel ${source_files} )
17 17 target_link_libraries(
18 18 testParallel
19 19 ${CMAKE_THREAD_LIBS_INIT}
20   - DD_Client
  20 + ${DDCLIENTLIBRARY}
21 21 )
22 22  
23 23 install (TARGETS testParallel DESTINATION tests)
... ...
tests/testParallel.c
... ... @@ -100,7 +100,7 @@ int runRequest(char* ViName, char* StartTime, char* TimeInt, int NbPar, char** P
100 100 return 0;
101 101 }
102 102  
103   - error = DD_SetTimeInfo(ID, StartTime, &RealTime);
  103 + error = DD_SetTimeInfo(ID, StartTime, &RealTime);
104 104 if(error < 0)
105 105 {
106 106 error = DD_Close(ID);
... ...