loophole for blackfin not checking the data sent, hence splitting data to a few packets when size > 30k bytes

This commit is contained in:
maliakal_d 2018-11-21 15:34:58 +01:00
parent 40dedb8b07
commit cd3135c01d
4 changed files with 55 additions and 18 deletions

View File

@ -31,6 +31,9 @@ int myport=-1;
//struct sockaddr_in address;
//#define VERBOSE
#define BLACKFIN_DRVR_SND_LMT 30000 // rough limit
#define BLACKFIN_RSND_PCKT_LOOP 10
#define BLACKFIN_RSND_WAIT_US (10 * 1000)
int bindSocket(unsigned short int port_number) {
int i;
@ -314,13 +317,46 @@ int receiveData(int file_des, void* buf,int length, intType itype){
return ret;
}
int sendDataOnly(int file_des, void* buf,int length) {
int sendDataOnly(int file_des, void* buf,int length) {
if (!length)
return 0;
int ret = write(file_des, buf, length); //value of -1 is other end socket crash as sigpipe is ignored
if (ret < 0) cprintf(BG_RED, "Error writing to socket. Possible socket crash\n");
return ret;
int bytesSent = 0;
int retry = 0; // retry index when buffer is blocked (write returns 0)
while (bytesSent < length) {
// setting a max packet size for blackfin driver (and network driver does not do a check if packets sent)
int bytesToSend = length - bytesSent;
if (bytesToSend > BLACKFIN_DRVR_SND_LMT)
bytesToSend = BLACKFIN_DRVR_SND_LMT;
// send
int rc = write(file_des, (char*)buf + bytesSent, bytesToSend);
// error
if (rc < 0) {
cprintf(BG_RED, "Error writing to socket. Possible socket crash\n");
return bytesSent;
}
// also error, wrote nothing, buffer blocked up, too fast sending for client
if (rc == 0) {
cprintf(RED, "Error writing to socket. Buffer full. Retry: %d\n", retry);
++retry;
// wrote nothing for many loops
if (retry >= BLACKFIN_RSND_PCKT_LOOP) {
cprintf(BG_RED, "Error writing to socket. Buffer full! Too fast! No more.\n");
return bytesSent;
}
usleep(BLACKFIN_RSND_WAIT_US);
}
// wrote something, reset retry
else {
retry = 0;
}
bytesSent += rc;
}
return bytesSent;
}

View File

@ -1,9 +1,9 @@
Path: slsDetectorsPackage/slsDetectorSoftware/jctbDetectorServer
URL: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git
Repository Root: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git
Repsitory UUID: 83600fcb15c8261173ab15a8ba8d1009693f2d23
Revision: 27
Branch: anna
Last Changed Author: Anna_Bergamaschi
Last Changed Rev: 3962
Last Changed Date: 2018-09-04 11:59:37.000000002 +0200 ./firmware_funcs.c
Repsitory UUID: 40dedb8b07886171334c85a6f0035f02f868ac6d
Revision: 28
Branch: developer
Last Changed Author: Gemma_Tinti
Last Changed Rev: 4052
Last Changed Date: 2018-11-21 11:31:54.000000002 +0100 ./server_funcs.c

View File

@ -1,6 +1,6 @@
#define GITURL "git@github.com:slsdetectorgroup/slsDetectorPackage.git"
#define GITREPUUID "83600fcb15c8261173ab15a8ba8d1009693f2d23"
#define GITAUTH "Anna_Bergamaschi"
#define GITREV 0x3962
#define GITDATE 0x20180904
#define GITBRANCH "anna"
#define GITREPUUID "40dedb8b07886171334c85a6f0035f02f868ac6d"
#define GITAUTH "Gemma_Tinti"
#define GITREV 0x4052
#define GITDATE 0x20181121
#define GITBRANCH "developer"

View File

@ -1877,6 +1877,7 @@ int start_acquisition(int file_des) {
ret=FAIL;
sprintf(mess,"Detector locked by %s\n",lastClientIP);
} else {
nframes = 0;
ret=startStateMachine();
}
if (ret==FAIL)
@ -2057,7 +2058,7 @@ int read_frame(int file_des) {
printf("sending pointer %x of size %d\n",(unsigned int)(dataretval),dataBytes);
#endif
n=sendDataOnly(file_des,dataretval,dataBytes);
printf("Sent %d bytes\n",n);
printf("Frame %d, Sent %d bytes\n", nframes, n);
} else {
if (getFrames()>-1) {
dataret=FAIL;
@ -2122,7 +2123,7 @@ int start_and_read_all(int file_des) {
return dataret;
}
nframes = 0;
startStateMachine();
/* ret=startStateMachine();