int ex_send_file(ExHttp *pHttp, const char *filePath) { char buf[BUFSIZ] ; char *pBuf = buf ; int ret = 0 ; pBuf += codeSet( pBuf, 200 ) ; pHttp->url = ( char * ) filePath ; stat( filePath, &pHttp->st ) ; pBuf += fileSet( pBuf, pHttp ) ; do { if ( (ret = sendHead( pHttp, buf, pBuf-buf ))<0 ) break ; if ( (ret = sendFileStream( pHttp, filePath ))<0 ) break ; } while ( 0 ) ; return ret ; }
static int staticProcess(const ExHttp *pHttp) { char buf[BUFSIZ]; char *pBuf = buf; int ret = 0; int code = cacheCheck(pHttp); pBuf += codeSet(pBuf , code); if (code == 200) { pBuf += fileSet(pBuf , pHttp); pBuf += connectionSet(pBuf); } do { if ((ret = sendHead(pHttp, buf , pBuf - buf)) < 0) break; if (code == 304 || 'H' == *(pHttp->method)) break; ret = sendFileStream(pHttp, pHttp->url); } while (0); return ret; }
bool MainWindow::executeCommand(const DRUIDString & command) { static const wxString runStatus(wxT("Executing command")); static const wxString inputRequired(wxT("Input Required...")); static const wxString integerInputRequired(wxT("Integer input Required...")); static const wxString numericInputRequired(wxT("Numeric input Required...")); static const wxString runStatusDone(wxT(" completed")); SetStatusText(runStatus); uint8_t wait_attempts=0; while (executing_request && wait_attempts++ < 5) usleep(1000); touchLastInteraction(); DRUID::SerialUIUserPtr serial_user = connection->serialUser(); DRUID_DEBUG2("Doing send+rcv for", command); executing_request = true; if ( (! serial_user->sendAndReceive(command)) || serial_user->hasError()) { wxString errMsg(DRUID_STDSTRING_TOWX(serial_user->errorMessage())); SetStatusText(errMsg); MW_RETURNFROM_EXECUTECOMMAND(false); } awaiting_input = false; wxString cmdName(DRUID_STDSTRING_TOWX(command)); if (serial_user->inputRequired()) { serial_user->flushReceiveBuffer(); serial_user->setAutoReplaceLastMessage(false); { // may have more than a single input to enter, so we do/while it... DRUID_DEBUG("Need input..."); oldFocus = this->FindFocus(); awaiting_input = true; DRUID::UserInputType reqType = serial_user->inputRequiredType(); // get the name from the prompt, if possible. if (serial_user->inputRequiredPromptString().size()) { cmdName = DRUID_STDSTRING_TOWX(serial_user->inputRequiredPromptString()); } bool streamSuccess; switch (reqType) { case DRUID::InputType_Numeric: DRUID_DEBUG("Numeric input required"); SetStatusText(numericInputRequired); break; case DRUID::InputType_Integer: DRUID_DEBUG("Numeric (int) input required"); SetStatusText(integerInputRequired); break; case DRUID::InputType_Stream: DRUID_DEBUG("Want a stream (file) upload"); // little bit different, this one... we need to select a file and stream its contents in... streamSuccess = sendFileStream(); // outputTextCtrl->AppendText(DRUID_STDSTRING_TOWX(serial_user->lastMessage())); awaiting_input = false; MW_RETURNFROM_EXECUTECOMMAND(streamSuccess); break; default: DRUID_DEBUG("String input required"); SetStatusText(inputRequired); break; } input->acceptInput(true, cmdName, reqType); } } else { wxString stat(cmdName); stat += runStatusDone; SetStatusText(stat); if (serial_user->messageReceived()) { outputTextCtrl->AppendText(DRUID_STDSTRING_TOWX(serial_user->lastMessage())); serial_user->lastMessageClear(); } serial_user->setAutoReplaceLastMessage(true); if (serial_user->requestedTerminate()) { SetStatusText(wxT("GUI Termination requested")); // TODO: FIXME -- show user we aren't just dying but terminating on purpose. doQuit(); MW_RETURNFROM_EXECUTECOMMAND(true); } if (useStateTracking() && serial_user->numTrackedVariables()) { last_interaction = 0; } } MW_RETURNFROM_EXECUTECOMMAND(true); }
static int staticProcess(const ExHttp *pHttp) { char buf[BUFSIZ] ; char *pBuf = buf ; int ret = 0 ; int code = cacheCheck( pHttp ) ; pBuf += codeSet( pBuf, code ) ; if ( code==200 ) { pBuf += fileSet( pBuf, pHttp ) ; } if ( strcmp( get_mime_type( pHttp->url ), "image/png" )!=0 ) pBuf += setCookie( pBuf, pHttp ) ; do { if ( code==206 ) { char rangeTemp[128] ; char * range = ( char * ) get_head_info( pHttp, "Range" ) ; strncpy( ( char * ) &rangeTemp, range, 128 ) ; range = ( char * ) &rangeTemp ; SKIP( &range, '=' ) ; char * sRange = range ; SKIP( &range, '-' ) ; char date[35] ; strftime( date, 35, "%a, %d %b %Y %X GMT", localtime( &(pHttp->st.st_ctime) ) ) ; int startRange = (*sRange=='\0') ? -1 : atoi( sRange ) ; int endRange = (*range=='\0') ? -1 : atoi( range ) ; // printf("start :%d end :%d\n",startRange,endRange ) ; if ( startRange<0 ) { startRange = pHttp->st.st_size-endRange ; endRange = pHttp->st.st_size ; } else if ( endRange<0 ) { endRange = pHttp->st.st_size ; } pBuf += sprintf( pBuf, "connection: close\n" "Last-Modified: %s\n" "Accept-Ranges: bytes\n" "Content-Length: %d\n" "Content-Range: bytes %d-%d/%d\n", date, endRange-startRange, startRange, endRange, pHttp->st.st_size ) ; if ( (ret = sendHead( pHttp, buf, pBuf-buf ))<0 ) break ; ret = sendFileRangeStream( pHttp, pHttp->url, startRange, endRange + 1 ) ; break ; } if ( (ret = sendHead( pHttp, buf, pBuf-buf ))<0 ) break ; if ( code==304|| code == 412 || 'H'== *(pHttp->method) ) break ; ret = sendFileStream( pHttp, pHttp->url ) ; } while ( 0 ) ; return ret ; }