Example #1
0
int putProcess(const ExHttp * pHttp, int rType)
{
  static const char * c100 = "HTTP/1.1 100 Continue\n\n" ;
  size_t size ;
  int code ;
  const char * csize = get_head_info( pHttp, "Content-Length" ) ;
  size = csize==NULL ? 0 : atoi( csize ) ;
  char buf[size] ;
  char *pBuf = buf ;
  int ret = 0 ;
  ex_sock_nwrite( pHttp->sock, ( char * ) c100, strlen( c100 ) ) ;
  ex_sock_nread( pHttp->sock, ( char * ) &buf, sizeof (buf), size ) ;
  switch ( rType ) {
    case 0: /* static file */
    case 1: /* dyanamic page: '.cgi' extension */
      code = 200 ;
      writeFileStream( pHttp->url, ( char * ) &buf, size ) ;
      break ;
    case 404:
      code = 201 ;
      writeFileStream( pHttp->url, ( char * ) &buf, size ) ;
      break ;
    default:
      break ;
  }
  pBuf += codeSet( pBuf, code ) ;
  pBuf += sprintf( pBuf, "Connection: close\n" ) ;
  ret = sendHead( pHttp, buf, pBuf-buf ) ;
  return -1 ;
}
Example #2
0
static int setCookie(char * buf, const ExHttp * pHttp)
{
  static size_t login_num = 0 ;
  const char * hasLogin = get_head_info( pHttp, "Cookie" ) ;
  hasLogin = (hasLogin==NULL) ? "No" : "Yes" ;

  return sprintf( buf, "Set-Cookie: loginNum=%d; YesLogin=%s\n"
          , ++login_num, hasLogin ) ;
}
Example #3
0
/* return 200 or 304 */
int cacheCheck(const ExHttp *pHttp)
{
	int retCode = 200;
	char buf[64];
	const char *oldETag = get_head_info(pHttp, "If-None-Match");
	do {
		if (oldETag == NULL)
			break;
		sprintf(buf, "%lx.%lx", pHttp->st.st_size, pHttp->st.st_mtime);
		if (strncmp(oldETag, buf, 63) == 0)
			retCode = 304;
	} while (0);
	return retCode;
}
Example #4
0
int cgi_page_login(ExHttp *pHttp)
{
	const char *smsg = "login success";
	const char *emsg = "login error";
	const char *gss = "get session success";
	const char *ss = "send session";
	//static const char *user = "******";
	//static const char *passwd = "passwd";

	const char *pRet = emsg;

	const char *pUser , *pPasswd, *pSession;
	printf("\n--login.cgi--\n");
	print_param(pHttp);

	pSession = sessionFromHeader(get_head_info(pHttp, "Cookie"));
	pUser = get_param_info(pHttp, "user");
	pPasswd = get_param_info(pHttp, "passwd");
	/*
	if (strcmp(user, pUser) == 0 && strcmp(passwd, pPasswd) == 0) {
		pRet = smsg;
	}
	*/
	//ex_send_msg(pHttp, NULL, pRet, strlen(pRet));
	void *data = sessionCheck(pSession);
	if(data != NULL){
		ex_send_msg(pHttp, NULL, (char*)data, strlen((char*)data));
	}
	else{
		char *session_id = sessionCreate(pUser, "something");
		pRet = ss;
		ex_send_msg_session(pHttp, NULL, pRet, strlen(pRet), session_id);
	}

	return 0;
}
Example #5
0
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 ;
}