deleted a few unnecessary c files

git-svn-id: file:///afs/psi.ch/project/sls_det_software/svn/slsDetectorSoftware@409 951219d9-93cf-4727-9268-0efd64621fa3
This commit is contained in:
l_maliakal_d
2012-12-17 14:12:26 +00:00
parent 499be37d0c
commit 3d6530f043
8 changed files with 0 additions and 2346 deletions

View File

@@ -1 +0,0 @@
../commonFiles/communication_funcs.c

View File

@@ -1 +0,0 @@
../commonFiles/communication_funcs.h

View File

@@ -1,73 +0,0 @@
/* A simple server in the internet domain using TCP
The port number is passed as an argument */
#include "communication_funcs.h"
#include "slsReceiver_funcs.h"
#include <stdlib.h>
extern int sockfd;
void error(char *msg)
{
perror(msg);
}
int main(int argc, char *argv[])
{
int portno = DEFAULT_PORTNO+2;
int retval = OK;
int sd, fd;
//init_receiver(argv[1]); //defined in slsReceiver_funcs
sd=bindSocket(portno); //defined in communication_funcs
sockfd=sd;
if (getServerError(sd)) { //defined in communication_funcs
printf("server error!\n");
return -1;
}
/* assign function table */
function_table(); //defined in slsReceiver_funcs
#ifdef VERBOSE
printf("function table assigned \n");
#endif
printf("Ready...\n");
/* waits for connection */
while(retval!=GOODBYE) {
#ifdef VERBOSE
printf("\n");
#endif
#ifdef VERY_VERBOSE
printf("Waiting for client call\n");
#endif
fd=acceptConnection(sockfd); //defined in communication_funcs
#ifdef VERY_VERBOSE
printf("Conenction accepted\n");
#endif
if (fd>0) {
retval=decode_function(fd); //defined in slsReceiverServer_funcs
#ifdef VERY_VERBOSE
printf("function executed\n");
#endif
closeConnection(fd); //defined in communication_funcs
#ifdef VERY_VERBOSE
printf("connection closed\n");
#endif
}
}
exitServer(sockfd); //defined in communication_funcs
printf("Goodbye!\n");
return 0;
}

View File

@@ -1,398 +0,0 @@
#ifdef SLS_RECEIVER_FUNCTION_LIST
#include "slsReceiverFunctionList.h"
#include "sls_detector_defs.h"
#include <stdio.h>
#include <stdlib.h>/* exit() */
#include <string.h> /* memset(), memcpy() */
#include <sys/mman.h>
#include <fcntl.h>
#include <stdarg.h>
#include <unistd.h> /* fork(), write(), close() */
#include <asm/page.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <sys/socket.h>/* socket(), bind(), listen(), accept() */
#include <signal.h>
#include <netinet/tcp.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <time.h>
#include <sys/time.h>
#include <netinet/in.h>
#include <sys/utsname.h> /* uname() */
#include <pthread.h> /* thread */
//constants
#define MAX_BUFLEN 1048576
#define TCP_PORT_NUMBER 2233
#define SRVNAME "localhost"
#define SERVER_PORT 50001
#define BUFFER_LENGTH 1286
#define FALSE 0
int gui_acquisition_thread_running = 0;
int err = 0;
pthread_t gui_acquisition_thread;
char buffer[BUFFER_LENGTH*2];
char sendbuffer[BUFFER_LENGTH*2];
char onebuffer[BUFFER_LENGTH];
int sd = -1;
int sockfd;
FILE *sfilefd;
char savefilename[128];
char filePath[MAX_STR_LENGTH]="";
char fileName[MAX_STR_LENGTH]="run";
int fileIndex=0;
int frameIndexNeeded=1;
//for each scan
int frameIndex=0;
int startFrameIndex=-1;
int framesCaught=0;
//for each acquisition
int acquisitionIndex=0;
int startAcquisitionIndex=-1;//to remember progress for scans
int totalFramesCaught=0;
int framesInFile=0;//to know when to start next file
enum runStatus status = IDLE;
void closeFile(){
if(gui_acquisition_thread_running){
printf("Closing file\n");
fclose(sfilefd);
}
exit(0);
}
enum runStatus getReceiverStatus(){
#ifdef VERBOSE
printf("Status:%d\n",status);
#endif
return status;
}
char* getFileName(){
return fileName;
}
char* setFileName(char fName[]){
if(strlen(fName)){
strcpy(fileName,fName);
}
return getFileName();
}
char* getFilePath(){
return filePath;
}
char* setFilePath(char fPath[]){
if(strlen(fPath)){
/*check if filepath exists and chop off last '/'*/
struct stat st;
if(stat(fPath,&st) == 0)
strcpy(filePath,fPath);
}
return getFilePath();
}
int getFileIndex(){
return fileIndex;
}
int setFileIndex(int index){
if(index>=0){
fileIndex=index;
}
return getFileIndex();
}
int getStartFrameIndex(){
return startFrameIndex;
}
int getFrameIndex(){
if(startFrameIndex==-1)
frameIndex=0;
else
frameIndex=((int)(*((int*)buffer)) - startFrameIndex)/2;
return frameIndex;
}
int getAcquisitionIndex(){
if(startAcquisitionIndex==-1)
acquisitionIndex=0;
else
acquisitionIndex=((int)(*((int*)buffer)) - startAcquisitionIndex)/2;
return acquisitionIndex;
}
int getFramesCaught(){
return framesCaught;
}
int getTotalFramesCaught(){
return totalFramesCaught;
}
int resetTotalFramesCaught(int index){
startAcquisitionIndex=-1;
totalFramesCaught=0;
frameIndexNeeded=index;
return frameIndexNeeded;
}
void* startListening(void *arg){
#ifdef VERYVERBOSE
printf("In startListening()\n");
#endif
/***********************************************************************/
/* Variable and structure definitions. */
/***********************************************************************/
sd = -1;
int rc1, rc2, rc;
int currframenum, prevframenum;
struct sockaddr_in serveraddr;
struct sockaddr_in clientaddr;
socklen_t clientaddrlen = sizeof(clientaddr);
framesInFile=0;
frameIndex=0;
startFrameIndex=-1;
framesCaught=0;
/***********************************************************************/
/* Catch signal SIGINT to close files properly */
/***********************************************************************/
signal(SIGINT, closeFile);
//create file name
if(!frameIndexNeeded)
sprintf(savefilename, "%s/%s_%d.raw", filePath,fileName,fileIndex);
else
sprintf(savefilename, "%s/%s_f%012d_%d.raw", filePath,fileName,framesCaught,fileIndex);
/***********************************************************************/
/* A do/while(FALSE) loop is used to make error cleanup easier. The */
/* close() of each of the socket descriptors is only done once at the */
/* very end of the program. */
/***********************************************************************/
do {
/********************************************************************/
/* The socket() function returns a socket descriptor, which represents */
/* an endpoint. The statement also identifies that the INET */
/* (Internet Protocol) address family with the UDP transport */
/* (SOCK_DGRAM) will be used for this socket. */
/********************************************************************/
sd = socket(AF_INET, SOCK_DGRAM, 0);
if (sd < 0) {
perror("socket() failed");
break;
}
/********************************************************************/
/* After the socket descriptor is created, a bind() function gets a */
/* unique name for the socket. In this example, the user sets the */
/* s_addr to zero, which means that the UDP port of 3555 will be */
/* bound to all IP addresses on the system. */
/********************************************************************/
memset(&serveraddr, 0, sizeof(serveraddr));
serveraddr.sin_family = AF_INET;
serveraddr.sin_port = htons(SERVER_PORT);
//serveraddr.sin_addr.s_addr = inet_addr(server_ip);
serveraddr.sin_addr.s_addr = htonl(INADDR_ANY);
rc = bind(sd, (struct sockaddr *) &serveraddr, sizeof(serveraddr));
if (rc < 0) {
perror("bind() failed");
break;
}
sfilefd = fopen((const char *) (savefilename), "w");
printf("Saving to ... %s. Ready! \n", savefilename);
while (gui_acquisition_thread_running) {
/********************************************************************/
/* The server uses the recvfrom() function to receive that data. */
/* The recvfrom() function waits indefinitely for data to arrive. */
/********************************************************************/
if (framesInFile == 20000) {
fclose(sfilefd);
currframenum=(int)(*((int*)buffer));
getFrameIndex();
//create file name
if(!frameIndexNeeded)
sprintf(savefilename, "%s/%s_%d.raw", filePath,fileName,fileIndex);
else
sprintf(savefilename, "%s/%s_f%012d_%d.raw", filePath,fileName,framesCaught,fileIndex);
printf("saving to %s\t\tpacket loss %f %%\t\tframenum %d\n", savefilename,((currframenum-prevframenum-(2*framesInFile))/(double)(2*framesInFile))*100.000,currframenum);
sfilefd = fopen((const char *) (savefilename), "w");
prevframenum=currframenum;
framesInFile = 0;
}
status = RUNNING;
rc1 = recvfrom(sd, buffer, sizeof(onebuffer), 0,
(struct sockaddr *) &clientaddr, &clientaddrlen);
//printf("rc1 done\n");
rc2 = recvfrom(sd, buffer+sizeof(onebuffer), sizeof(onebuffer), 0,
(struct sockaddr *) &clientaddr, &clientaddrlen);
//for each scan
if(startFrameIndex==-1){
startFrameIndex=(int)(*((int*)buffer))-2;
prevframenum=startFrameIndex;
}
//start of acquisition
if(startAcquisitionIndex==-1)
startAcquisitionIndex=startFrameIndex;
//printf("rc2 done\n");
if ((rc1 < 0) || (rc2 < 0)) {
perror("recvfrom() failed");
break;
}
//so that it doesnt write the last frame twice
if(gui_acquisition_thread_running){
fwrite(buffer, 1, rc1, sfilefd);
fwrite(buffer+sizeof(onebuffer), 1, rc2, sfilefd);
framesInFile++;
framesCaught++;
totalFramesCaught++;
//printf("saving\n");
}
}
} while (gui_acquisition_thread_running);
gui_acquisition_thread_running=0;
status = IDLE;
/***********************************************************************/
/* Close down any open socket descriptors */
/***********************************************************************/
if (sd != -1){
printf("Closing sd\n");fflush(stdout);
close(sd);
}
//close file
fclose(sfilefd);
printf("sfield:%d\n",(int)sfilefd);
return NULL;
}
int startReceiver(){
#ifdef VERBOSE
printf("Starting Receiver\n");
#endif
if(!gui_acquisition_thread_running){
printf("Starting new acquisition threadddd ....\n");
gui_acquisition_thread_running=1;
//status = RUNNING;
err = pthread_create(&gui_acquisition_thread, NULL,&startListening, NULL);
if(!err){
while(status!=RUNNING);
printf("\n Thread created successfully.\n");
}else{
gui_acquisition_thread_running=0;
status = IDLE;
printf("\n Cant create thread. Status:%d\n",status);
return FAIL;
}
}
return OK;
}
int stopReceiver(){
#ifdef VERBOSE
printf("Stopping Receiver\n");
#endif
if(gui_acquisition_thread_running){
printf("Stopping new acquisition threadddd ....\n");
//stop thread
gui_acquisition_thread_running=0;
if (sd != -1)
shutdown(sd, SHUT_RDWR);
pthread_join(gui_acquisition_thread,NULL);
status = IDLE;
}
printf("Status:%d\n",status);
return OK;
}
char* readFrame(char* fName){
strcpy(fName,savefilename);
return buffer;
}
#endif

View File

@@ -1,941 +0,0 @@
//#include "sls_detector_defs.h"
#include "slsReceiver_funcs.h"
#include "slsReceiverFunctionList.h"
#include "sls_detector_defs.h"
#include "sls_detector_funcs.h"
#include <string.h>
#include <stdlib.h>
// Global variables
int (*flist[256])(int);
//defined in the detector specific file
#ifdef MYTHEND
const enum detectorType myDetectorType=MYTHEN;
#elif GOTTHARDD
const enum detectorType myDetectorType=GOTTHARD;
#elif EIGERD
const enum detectorType myDetectorType=EIGER;
#elif PICASSOD
const enum detectorType myDetectorType=PICASSO;
#else
const enum detectorType myDetectorType=GENERIC;
#endif
//define in communication_funcs
extern int lockStatus;
extern char lastClientIP[INET_ADDRSTRLEN];
extern char thisClientIP[INET_ADDRSTRLEN];
extern int differentClients;
/* global variables for optimized readout */
char *dataretval=NULL;
int dataret;
char mess[1000];
int dataBytes;
/*
int init_receiver() {
initializeReceiver();
strcpy(mess,"dummy message");
strcpy(lastClientIP,"none");
strcpy(thisClientIP,"none1");
lockStatus=0;
return OK;
}
*/
int decode_function(int file_des) {
int fnum,n;
int retval=FAIL;
#ifdef VERBOSE
printf( "receive data\n");
#endif
n = receiveDataOnly(file_des,&fnum,sizeof(fnum));
if (n <= 0) {
#ifdef VERBOSE
printf("ERROR reading from socket %d, %d %d\n", n, fnum, file_des);
#endif
return FAIL;
}
#ifdef VERBOSE
else
printf("size of data received %d\n",n);
#endif
#ifdef VERBOSE
printf( "calling function fnum = %d %x\n",fnum,flist[fnum]);
#endif
if (fnum<0 || fnum>255)
fnum=255;
retval=(*flist[fnum])(file_des);
if (retval==FAIL)
printf( "Error executing the function = %d \n",fnum);
return retval;
}
int function_table() {
int i;
for (i=0;i<256;i++){
flist[i]=&M_nofunc;
}
flist[F_EXIT_SERVER]=&exit_server; //not implemented in client
flist[F_EXEC_COMMAND]=&exec_command; //not implemented in client
flist[F_SET_FILE_NAME]=&set_file_name;
flist[F_SET_FILE_PATH]=&set_file_dir;
flist[F_SET_FILE_INDEX]=&set_file_index;
flist[F_START_RECEIVER]=&start_receiver;
flist[F_STOP_RECEIVER]=&stop_receiver;
flist[F_GET_RECEIVER_STATUS]=&get_receiver_status;
flist[F_GET_FRAMES_CAUGHT]=&get_frames_caught;
flist[F_GET_FRAME_INDEX]=&get_frame_index;
flist[F_RESET_FRAMES_CAUGHT]=&reset_frames_caught;
flist[F_READ_FRAME]=&read_frame;
flist[F_LOCK_RECEIVER]=&lock_receiver;
flist[F_SET_PORT]=&set_port;
flist[F_GET_LAST_CLIENT_IP]=&get_last_client_ip;
flist[F_UPDATE_CLIENT]=&update_client;
#ifdef VERBOSE
/* for (i=0;i<256;i++){
printf("function %d located at %x\n",i,flist[i]);
}*/
#endif
return OK;
}
int set_file_name(int file_des) {
int ret=OK;
int n=0;
char fName[MAX_STR_LENGTH],retval[MAX_STR_LENGTH]="";
strcpy(mess,"Could not set file name");
/* receive arguments */
n = receiveDataOnly(file_des,fName,MAX_STR_LENGTH);
if (n < 0) {
sprintf(mess,"Error reading from socket\n");
ret=FAIL;
}
/* execute action if the arguments correctly arrived*/
if (ret==OK) {
#ifdef SLS_RECEIVER_FUNCTION_LIST
if (lockStatus==1 && differentClients==1){//necessary???
sprintf(mess,"Receiver locked by %s\n", lastClientIP);
ret=FAIL;
}
/* else if((strlen(fName))&&(getReceiverStatus()==RUNNING)){
strcpy(mess,"Can not set file name while receiver running");
ret = FAIL;
}
*/ else
strcpy(retval,setFileName(fName));
}
#endif
#ifdef VERBOSE
if(ret!=FAIL)
printf("file name:%s\n",retval);
else
printf("%s",mess);
#endif
if(ret==OK && differentClients){
printf("Force update\n");
ret=FORCE_UPDATE;
}
/* send answer */
n = sendDataOnly(file_des,&ret,sizeof(ret));
if(ret==FAIL)
n = sendDataOnly(file_des,mess,sizeof(mess));
n = sendDataOnly(file_des,retval,MAX_STR_LENGTH);
/*return ok/fail*/
return ret;
}
int set_file_dir(int file_des) {
int ret=OK;
int n=0;
char fPath[MAX_STR_LENGTH],retval[MAX_STR_LENGTH]="";
strcpy(mess,"Could not set file path\n");
/* receive arguments */
n = receiveDataOnly(file_des,fPath,MAX_STR_LENGTH);
if (n < 0) {
sprintf(mess,"Error reading from socket\n");
ret=FAIL;
}
/* execute action if the arguments correctly arrived*/
if (ret==OK) {
#ifdef SLS_RECEIVER_FUNCTION_LIST
if (lockStatus==1 && differentClients==1){//necessary???
sprintf(mess,"Receiver locked by %s\n", lastClientIP);
ret=FAIL;
}
else if((strlen(fPath))&&(getReceiverStatus()==RUNNING)){
strcpy(mess,"Can not set file path while receiver running\n");
ret = FAIL;
}
else{
strcpy(retval,setFilePath(fPath));
/* if file path doesnt exist*/
if(strlen(fPath))
if (strcmp(retval,fPath)){
strcpy(mess,"receiver file path does not exist\n");
ret=FAIL;
}
}
}
#endif
#ifdef VERBOSE
if(ret!=FAIL)
printf("file path:%s\n",retval);
else
printf("%s",mess);
#endif
if(ret==OK && differentClients){
printf("Force update\n");
ret=FORCE_UPDATE;
}
/* send answer */
n = sendDataOnly(file_des,&ret,sizeof(ret));
if(ret==FAIL)
n = sendDataOnly(file_des,mess,sizeof(mess));
n = sendDataOnly(file_des,retval,MAX_STR_LENGTH);
/*return ok/fail*/
return ret;
}
int set_file_index(int file_des) {
int ret=OK;
int n=0;
int index,retval=-1;
strcpy(mess,"Could not set file index\n");
/* receive arguments */
n = receiveDataOnly(file_des,&index,sizeof(index));
if (n < 0) {
sprintf(mess,"Error reading from socket\n");
ret=FAIL;
}
/* execute action if the arguments correctly arrived*/
if (ret==OK) {
#ifdef SLS_RECEIVER_FUNCTION_LIST
if (lockStatus==1 && differentClients==1){//necessary???
sprintf(mess,"Receiver locked by %s\n", lastClientIP);
ret=FAIL;
}
/* else if((index>=0)&&(getReceiverStatus()==RUNNING)){
strcpy(mess,"Can not set file index while receiver running\n");
ret = FAIL;
}
*/ else
retval=setFileIndex(index);
}
#endif
#ifdef VERBOSE
if(ret!=FAIL)
printf("file index:%d\n",retval);
else
printf("%s",mess);
#endif
if(ret==OK && differentClients){
printf("Force update\n");
ret=FORCE_UPDATE;
}
/* send answer */
n = sendDataOnly(file_des,&ret,sizeof(ret));
if(ret==FAIL)
n = sendDataOnly(file_des,mess,sizeof(mess));
n = sendDataOnly(file_des,&retval,sizeof(retval));
/*return ok/fail*/
return ret;
}
int start_receiver(int file_des) {
int ret=OK;
int n=0;
strcpy(mess,"Could not start receiver\n");
/* execute action if the arguments correctly arrived*/
#ifdef SLS_RECEIVER_FUNCTION_LIST
if (lockStatus==1 && differentClients==1){//necessary???
sprintf(mess,"Receiver locked by %s\n", lastClientIP);
ret=FAIL;
}
else if(!strlen(setFilePath(""))){
strcpy(mess,"receiver not set up. set receiver ip again.\n");
ret = FAIL;
}
else if(getReceiverStatus()!=RUNNING)
ret=startReceiver();
#endif
if(ret==OK && differentClients){
printf("Force update\n");
ret=FORCE_UPDATE;
}
/* send answer */
n = sendDataOnly(file_des,&ret,sizeof(ret));
if(ret==FAIL)
n = sendDataOnly(file_des,mess,sizeof(mess));
/*return ok/fail*/
return ret;
}
int stop_receiver(int file_des) {
int ret=OK;
int n=0;
strcpy(mess,"Could not stop receiver\n");
/* execute action if the arguments correctly arrived*/
#ifdef SLS_RECEIVER_FUNCTION_LIST
if (lockStatus==1 && differentClients==1){//necessary???
sprintf(mess,"Receiver locked by %s\n", lastClientIP);
ret=FAIL;
}
else if(getReceiverStatus()!=IDLE)
ret=stopReceiver();
#endif
if(ret==OK && differentClients){
printf("Force update\n");
ret=FORCE_UPDATE;
}
/* send answer */
n = sendDataOnly(file_des,&ret,sizeof(ret));
if(ret==FAIL)
n = sendDataOnly(file_des,mess,sizeof(mess));
/*return ok/fail*/
return ret;
}
int get_receiver_status(int file_des) {
int ret=OK;
int n=0;
enum runStatus retval;
/* execute action if the arguments correctly arrived*/
#ifdef SLS_RECEIVER_FUNCTION_LIST
retval=getReceiverStatus();
#endif
if(ret==OK && differentClients){
printf("Force update\n");
ret=FORCE_UPDATE;
}
/* send answer */
n = sendDataOnly(file_des,&ret,sizeof(ret));
n = sendDataOnly(file_des,&retval,sizeof(retval));
/*return ok/fail*/
return ret;
}
int get_frames_caught(int file_des) {
int ret=OK;
int n=0;
int retval=-1;
/* execute action if the arguments correctly arrived*/
#ifdef SLS_RECEIVER_FUNCTION_LIST
retval=getTotalFramesCaught();
#endif
if(ret==OK && differentClients){
printf("Force update\n");
ret=FORCE_UPDATE;
}
/* send answer */
n = sendDataOnly(file_des,&ret,sizeof(ret));
n = sendDataOnly(file_des,&retval,sizeof(retval));
/*return ok/fail*/
return ret;
}
int get_frame_index(int file_des) {
int ret=OK;
int n=0;
int retval=-1;
/* execute action if the arguments correctly arrived*/
#ifdef SLS_RECEIVER_FUNCTION_LIST
retval=getAcquisitionIndex();
#endif
if(ret==OK && differentClients){
printf("Force update\n");
ret=FORCE_UPDATE;
}
/* send answer */
n = sendDataOnly(file_des,&ret,sizeof(ret));
n = sendDataOnly(file_des,&retval,sizeof(retval));
/*return ok/fail*/
return ret;
}
int reset_frames_caught(int file_des) {
int ret=OK;
int n=0;
int retval=-1;
int index=-1;
strcpy(mess,"Could not reset frames caught\n");
/* receive arguments */
n = receiveDataOnly(file_des,&index,sizeof(index));
if (n < 0) {
sprintf(mess,"Error reading from socket\n");
ret=FAIL;
}
if (ret==OK) {
/* execute action if the arguments correctly arrived*/
#ifdef SLS_RECEIVER_FUNCTION_LIST
if (lockStatus==1 && differentClients==1){//necessary???
sprintf(mess,"Receiver locked by %s\n", lastClientIP);
ret=FAIL;
}
else
retval=resetTotalFramesCaught(index);
#endif
}
if(ret==OK && differentClients){
printf("Force update\n");
ret=FORCE_UPDATE;
}
/* send answer */
n = sendDataOnly(file_des,&ret,sizeof(ret));
if(ret==FAIL)
n = sendDataOnly(file_des,mess,sizeof(mess));
n = sendDataOnly(file_des,&retval,sizeof(retval));
/*return ok/fail*/
return ret;
}
int read_frame(int file_des) {
int ret=OK;
int n=0,i,startIndex=-1;
char* retval=NULL;
char buffer[1286*2];
char fName[MAX_STR_LENGTH];
int arg[2];
arg[1]=1;//do not flip
int index=-1,index2=-1,fIndex=-1;;
strcpy(mess,"Could not read frame\n");
/* execute action if the arguments correctly arrived*/
#ifdef SLS_RECEIVER_FUNCTION_LIST
//wait till you get first frame 1. to get index(from startindex 2. filename corresponds to buffer value
if(startIndex==-1){
ret=FAIL;
strcpy(mess,"did not start index\n");
for(i=0;i<10;i++){
startIndex=getStartFrameIndex();
if(startIndex==-1)
usleep(1000000);
else {
ret=OK;
break;
}
}
}
//got atleast first frame, read buffer
if(ret==OK){
int count=0;
do{
if(count>0){ printf("\nunmatching: index:%d index2:%d\n",index,index2);fflush(stdout);}
retval=readFrame(fName);
index=(int)(*((int*)retval));
char* retval2= retval+1286;
index2= (int)(*((int*)retval2));
count++;
}while((index%2)==(index2%2));
fIndex=((int)(*((int*)retval)) - startIndex)/2;
arg[0]=fIndex-1;
arg[1]=(index%2);
#ifdef VERBOSE
printf("\nstartIndex:%d\n",startIndex);
printf("fName:%s\n",fName);
if((index%2)==0){
printf("\nEven Index, must flip:%d\n",index);
fflush(stdout);
}
#endif
}
#endif
if(ret==OK && differentClients){
printf("Force update\n");
ret=FORCE_UPDATE;
}
/*if(getReceiverStatus()==IDLE){
ret=FAIL;
printf("*************STOPPPED***\n");
}*/
/* send answer */
n = sendDataOnly(file_des,&ret,sizeof(ret));
if(ret==FAIL)
n = sendDataOnly(file_des,mess,sizeof(mess));
else{
n = sendDataOnly(file_des,fName,MAX_STR_LENGTH);
n = sendDataOnly(file_des,arg,sizeof(arg));
n = sendDataOnly(file_des,retval,sizeof(buffer));
}
/*return ok/fail*/
return ret;
}
int M_nofunc(int file_des){
int retval=FAIL;
sprintf(mess,"Unrecognized Function\n");
printf(mess);
sendDataOnly(file_des,&retval,sizeof(retval));
sendDataOnly(file_des,mess,sizeof(mess));
return GOODBYE;
}
int exit_server(int file_des) {
int retval=FAIL;
sendDataOnly(file_des,&retval,sizeof(retval));
printf("closing server.");
sprintf(mess,"closing server");
sendDataOnly(file_des,mess,sizeof(mess));
return GOODBYE;
}
int exec_command(int file_des) {
char cmd[MAX_STR_LENGTH];
char answer[MAX_STR_LENGTH];
int retval=OK;
int sysret=0;
int n=0;
// receive arguments
n = receiveDataOnly(file_des,cmd,MAX_STR_LENGTH);
if (n < 0) {
sprintf(mess,"Error reading from socket\n");
retval=FAIL;
}
// execute action if the arguments correctly arrived
if (retval==OK) {
//#ifdef VERBOSE
printf("executing command %s\n", cmd);
//#endif
if (lockStatus==0 || differentClients==0)
sysret=system(cmd);
//should be replaced by popen
if (sysret==0) {
sprintf(answer,"Succeeded\n");
if (lockStatus==1 && differentClients==1)
sprintf(answer,"Detector locked by %s\n", lastClientIP);
} else {
sprintf(answer,"Failed\n");
retval=FAIL;
}
} else {
sprintf(answer,"Could not receive the command\n");
}
// send answer
n = sendDataOnly(file_des,&retval,sizeof(retval));
n = sendDataOnly(file_des,answer,MAX_STR_LENGTH);
if (n < 0) {
sprintf(mess,"Error writing to socket");
retval=FAIL;
}
//return ok/fail
return retval;
}
int lock_receiver(int file_des) {
int n;
int ret=OK;
int lock;
n = receiveDataOnly(file_des,&lock,sizeof(lock));
if (n < 0) {
sprintf(mess,"Error reading from socket\n");
printf("Error reading from socket (lock)\n");
ret=FAIL;
}
if (lock>=0) {
if (lockStatus==0 || strcmp(lastClientIP,thisClientIP)==0 || strcmp(lastClientIP,"none")==0) {
lockStatus=lock;
strcpy(lastClientIP,thisClientIP);
} else {
ret=FAIL;
sprintf(mess,"Receiver already locked by %s\n", lastClientIP);
}
}
if (differentClients && ret==OK)
ret=FORCE_UPDATE;
n = sendDataOnly(file_des,&ret,sizeof(ret));
if (ret==FAIL) {
n = sendDataOnly(file_des,mess,sizeof(mess));
} else
n = sendDataOnly(file_des,&lockStatus,sizeof(lockStatus));
return ret;
}
int set_port(int file_des) {
int n;
int ret=OK;
int sd=-1;
enum portType p_type; /** data? control? stop? Unused! */
int p_number; /** new port number */
n = receiveDataOnly(file_des,&p_type,sizeof(p_type));
if (n < 0) {
sprintf(mess,"Error reading from socket\n");
printf("Error reading from socket (ptype)\n");
ret=FAIL;
}
n = receiveDataOnly(file_des,&p_number,sizeof(p_number));
if (n < 0) {
sprintf(mess,"Error reading from socket\n");
printf("Error reading from socket (pnum)\n");
ret=FAIL;
}
if (differentClients==1 && lockStatus==1 ) {
ret=FAIL;
sprintf(mess,"Detector locked by %s\n",lastClientIP);
} else {
if (p_number<1024) {
sprintf(mess,"Too low port number %d\n", p_number);
printf("\n");
ret=FAIL;
}
printf("set port %d to %d\n",p_type, p_number);
sd=bindSocket(p_number);
}
if (sd>=0) {
ret=OK;
if (differentClients )
ret=FORCE_UPDATE;
} else {
ret=FAIL;
sprintf(mess,"Could not bind port %d\n", p_number);
printf("Could not bind port %d\n", p_number);
if (sd==-10) {
sprintf(mess,"Port %d already set\n", p_number);
printf("Port %d already set\n", p_number);
}
}
n = sendDataOnly(file_des,&ret,sizeof(ret));
if (ret==FAIL) {
n = sendDataOnly(file_des,mess,sizeof(mess));
} else {
n = sendDataOnly(file_des,&p_number,sizeof(p_number));
closeConnection(file_des);
exitServer(sockfd);
sockfd=sd;
}
return ret;
}
int get_last_client_ip(int file_des) {
int ret=OK;
int n;
if (differentClients )
ret=FORCE_UPDATE;
n = sendDataOnly(file_des,&ret,sizeof(ret));
n = sendDataOnly(file_des,lastClientIP,sizeof(lastClientIP));
return ret;
}
int send_update(int file_des) {
int ret=OK;
int n,ind;
char path[MAX_STR_LENGTH];
n = sendDataOnly(file_des,lastClientIP,sizeof(lastClientIP));
//index
ind=getFileIndex(-1);
n = sendDataOnly(file_des,&ind,sizeof(ind));
//filepath
strcpy(path,getFilePath(""));
n = sendDataOnly(file_des,path,MAX_STR_LENGTH);
//filename
strcpy(path,getFileName(""));
n = sendDataOnly(file_des,path,MAX_STR_LENGTH);
if (lockStatus==0) {
strcpy(lastClientIP,thisClientIP);
}
return ret;
}
int update_client(int file_des) {
int ret=OK;
sendDataOnly(file_des,&ret,sizeof(ret));
return send_update(file_des);
}
/*
int set_master(int file_des) {
enum masterFlags retval=GET_MASTER;
enum masterFlags arg;
int n;
int ret=OK;
// int regret=OK;
sprintf(mess,"can't set master flags\n");
n = receiveDataOnly(file_des,&arg,sizeof(arg));
if (n < 0) {
sprintf(mess,"Error reading from socket\n");
ret=FAIL;
}
#ifdef VERBOSE
printf("setting master flags to %d\n",arg);
#endif
if (differentClients==1 && lockStatus==1 && arg!=GET_READOUT_FLAGS) {
ret=FAIL;
sprintf(mess,"Detector locked by %s\n",lastClientIP);
} else {
retval=setMaster(arg);
}
if (retval==GET_MASTER) {
ret=FAIL;
}
n = sendDataOnly(file_des,&ret,sizeof(ret));
if (ret==FAIL) {
n = sendDataOnly(file_des,mess,sizeof(mess));
} else {
n = sendDataOnly(file_des,&retval,sizeof(retval));
}
return ret;
}
int set_synchronization(int file_des) {
enum synchronizationMode retval=GET_MASTER;
enum synchronizationMode arg;
int n;
int ret=OK;
//int regret=OK;
sprintf(mess,"can't set synchronization mode\n");
n = receiveDataOnly(file_des,&arg,sizeof(arg));
if (n < 0) {
sprintf(mess,"Error reading from socket\n");
ret=FAIL;
}
#ifdef VERBOSE
printf("setting master flags to %d\n",arg);
#endif
if (differentClients==1 && lockStatus==1 && arg!=GET_READOUT_FLAGS) {
ret=FAIL;
sprintf(mess,"Detector locked by %s\n",lastClientIP);
} else {
retval=setSynchronization(arg);
}
if (retval==GET_SYNCHRONIZATION_MODE) {
ret=FAIL;
}
n = sendDataOnly(file_des,&ret,sizeof(ret));
if (ret==FAIL) {
n = sendDataOnly(file_des,mess,sizeof(mess));
} else {
n = sendDataOnly(file_des,&retval,sizeof(retval));
}
return ret;
}
*/