コード例 #1
0
STATUS _minParse(char* inputBuffer, min_parser_data* result) {
    currentBuffer = inputBuffer;
    for (char i=0;i < MIN_PARSER_INTERNAL_BUFFER_SIZE;i++) {
        char c = inputBuffer[i];

        switch(state) {
            case SEARCHING_HEADER: searchHeader(c); break;
            case SKIPPING_TIME: skipTime(c, i); break;
            case PARSING_STATUS: parseStatus(c, i); break;
            case PARSING_LAT_COORD: parseCoord(c, i, &(result->latCoord), PARSING_LAT_HEM); break;
            case PARSING_LAT_HEM: parseHem(c, i, &(result->latHem), PARSING_LONG_COORD); break;
            case PARSING_LONG_COORD: parseCoord(c, i, &(result->longCoord), PARSING_LONG_HEM); break;
            case PARSING_LONG_HEM: parseHem(c, i, &(result->longHem), DONE); break;
            case DONE: status = 1; break;
            default: state = SEARCHING_HEADER; break;
        }
    }

    memcpy(previousBuffer, currentBuffer, MIN_PARSER_INTERNAL_BUFFER_SIZE);

    return status;
}
コード例 #2
0
ファイル: main.c プロジェクト: OscarHMG/Educational-Program
int main(){
    int opt=0;
	int num,i,option;
	Pila *pila= loadHeaders();
	while(opt==0){
	//imprimir_pila(pila);
	printWelcomeMessage();
	headerInput(pila);
	num = inputNumOfStudents();
	for(i =0; i<num;i++){
		inputScores();
	}
	printf("\n\n");
	system("cls");
	printStadistics();
		
	option = printOptionMenu();
	
	switch(option){
       case 1:
            searchHeader(pila);
            break;
       case 2:
            printf("\n\nHeaders: \n\n");
            imprimir_pila(pila);
            system("PAUSE");
            break;
       case 3:
            eliminateHeader(pila);
            break;
             
             }
       }
	system("PAUSE");
	return 0;
}
コード例 #3
0
ファイル: util.c プロジェクト: jamesyan84/zbase
/*
 * return values:
 * < 0: error.
 *   0: success, connection still open.
 *   1: success, connection closed by server.
 * > 1: http response code if <200 or >300.
 */
static int processHTTPResponse( int sockfd, const char *contentType, PZ_BUF zBuf, FILE* fp)
{
    int   i, respCode, chunkLen, status = 0;
    char  *te, *ct, *temp = NULL;

    // Receive the response from the server...

    // Get first line of header..
    zBuf->length = 0;
    //ZError( DBG_MISC, "first recvNextLine...");
    if (recvNextLine( sockfd, zBuf)<0) return -1;
    ZInfo4( DBG_MISC, "%s", zBuf->buf );

    if (strncmp(zBuf->buf, "HTTP/", 5) )
    {
        return(-1);
    }
    for (i=0; zBuf->buf[i] != ' '; i++)
        ;

    respCode = atoi(zBuf->buf + i);
    if (respCode < 200 || respCode >= 300)
    {
        ZError(DBG_MISC, "Received an invalid response code->%d", respCode);
        return(respCode);
    }
    //ZError( DBG_MISC, "second recvNextLine...");

    // Get test of the header..
    while (recvNextLine(  sockfd, zBuf) > 2);

    ZInfo4(DBG_MISC, "HTTP Response Header->%s", zBuf->buf);

    if ((ct = searchHeader(zBuf->buf, "Content-Type: ", 14) ))
    {
        temp = strdup(ct);
        terminateLine(temp);
    }

    if (contentType)
    {
        if (temp)
        {
            char *cte = strchr(temp, ';');
            if(cte)
                *cte = '\0';
            if(matchContentType(temp, (char*)contentType) )
            {
                ZError(DBG_MISC, "CONTENT-TYPE doesn't match. actual->%s, expected->%s",
                       temp, contentType);
                free(temp);
                return(-1);
            }
            free(temp);
        }
        else
        {
            ZError(DBG_MISC, "CONTENT-TYPE doesn't match. actual->NULL, expected->%s",
                   contentType);
            return(-1);
        }
    }

    status = searchHeader(zBuf->buf, "Connection: close", 17) ||
             searchHeader(zBuf->buf, "Proxy-Connection: close", 23);

    if ((te = searchHeader(zBuf->buf, "Transfer-Encoding: ", 19)) )
        terminateLine(te);


    if (te && !strcasecmp(te, "chunked"))
    {
        ZInfo4(DBG_MISC, "Processing chunked response");
        zBuf->length = 0;
       // ZError( DBG_MISC, "first recvChunkedBody...");
        recvChunkedBody( sockfd, zBuf, fp);
    }
    else
    {
        /*
        * if there is a Content-Length header field it will be in
        * decimal.
        */
        if((te = searchHeader(zBuf->buf, "Content-Length: ", 16)))
        {
            ZInfo4(DBG_MISC, "Content-length present");
            if( ! (chunkLen = strtol(te, 0, 10)) )
            {
                ZError(DBG_MISC, "Unable to get chunkLen ->%s", te);
                return(-1);
            }
            // Reset length..
            zBuf->length = 0;
            ZInfo4(DBG_MISC, "Processing receive with chunkLen->%d", chunkLen);
            recvChunk2(  fp, sockfd, chunkLen);
        }
        else
        {
            /*
            * non-persistent connection, where close signals end
            * of data (i.e. 'Connection: close',
            * 'Proxy-Connection: close' or pre HTTP/1.1 server)
            */
            // Reset length..
            zBuf->length = 0;
         //   ZError( DBG_MISC, "third  recvChunk...");
            while (recvChunk2( fp, sockfd, BUFSIZE) == BUFSIZE);
            status = 1;
        }
    }
    return status;
}
コード例 #4
0
ファイル: biossums.c プロジェクト: jeppeter/vbox
int main(int argc, char **argv)
{
    FILE    *pIn, *pOut;
    size_t  cbIn, cbOut;
    int     fAdapterBios = 0;

    g_argv0 = argv[0];

    if (argc != 3)
        return fatal("Input file name and output file name required.\n");

    pIn = g_pIn = fopen(argv[1], "rb");
    if (!pIn)
        return fatal("Error opening '%s' for reading (%s).\n", argv[1], strerror(errno));

    pOut = g_pOut = fopen(argv[2], "wb");
    if (!pOut)
        return fatal("Error opening '%s' for writing (%s).\n", argv[2], strerror(errno));
    g_pszOutFile = argv[2];

    /* safety precaution (aka. complete paranoia :-) */
    memset(abBios, 0, sizeof(abBios));

    cbIn = fread(abBios, 1, sizeof(abBios), pIn);
    if (ferror(pIn))
        return fatal("Error reading from '%s' (%s).\n", argv[1], strerror(errno));
    g_pIn = NULL;
    fclose(pIn);

    fAdapterBios = abBios[0] == 0x55 && abBios[1] == 0xaa;

    /* align size to page size */
    if ((cbIn % 4096) != 0)
        cbIn = (cbIn + 4095) & ~4095;

    if (!fAdapterBios && cbIn != 64*1024)
        return fatal("Size of system BIOS is not 64KB!\n");

    if (fAdapterBios)
    {
        /* adapter BIOS */

        /* set the length indicator */
        abBios[2] = (uint8_t)(cbIn / 512);
    }
    else
    {
        /* system BIOS */
        size_t  cbChecksum;
        uint8_t u8Checksum;
        uint8_t *pbHeader;

        /* Set the BIOS32 header checksum. */
        switch (searchHeader(abBios, cbIn, "_32_", &pbHeader))
        {
            case 0:
                return fatal("No BIOS32 header not found!\n");
            case 2:
                return fatal("More than one BIOS32 header found!\n");
            case 1:
                cbChecksum = (size_t)pbHeader[9] * 16;
                u8Checksum = calculateChecksum(pbHeader, cbChecksum, 10);
                pbHeader[10] = u8Checksum;
                break;
        }

        /* Set the PIR header checksum according to PCI IRQ Routing table
         * specification version 1.0, Microsoft Corporation, 1996 */
        switch (searchHeader(abBios, cbIn, "$PIR", &pbHeader))
        {
            case 0:
                return fatal("No PCI IRQ routing table found!\n");
            case 2:
                return fatal("More than one PCI IRQ routing table found!\n");
            case 1:
                cbChecksum = (size_t)pbHeader[6] + (size_t)pbHeader[7] * 256;
                u8Checksum = calculateChecksum(pbHeader, cbChecksum, 31);
                pbHeader[31] = u8Checksum;
                break;
        }

        /* Set the SMBIOS header checksum according to System Management BIOS
         * Reference Specification Version 2.5, DSP0134. */
        switch (searchHeader(abBios, cbIn, "_SM_", &pbHeader))
        {
            case 0:
                return fatal("No SMBIOS header found!\n");
            case 2:
                return fatal("More than one SMBIOS header found!\n");
            case 1:
                /* at first fix the DMI header starting at SMBIOS header offset 16 */
                u8Checksum = calculateChecksum(pbHeader+16, 15, 5);
                pbHeader[21] = u8Checksum;

                /* now fix the checksum of the whole SMBIOS header */
                cbChecksum = (size_t)pbHeader[5];
                u8Checksum = calculateChecksum(pbHeader, cbChecksum, 4);
                pbHeader[4] = u8Checksum;
                break;
        }
    }

    /* set the BIOS checksum */
    abBios[cbIn-1] = calculateChecksum(abBios, cbIn, cbIn - 1);

    cbOut = fwrite(abBios, 1, cbIn, pOut);
    if (ferror(pOut))
        return fatal("Error writing to '%s' (%s).\n", g_pszOutFile, strerror(errno));
    g_pOut = NULL;
    if (fclose(pOut))
        return fatal("Error closing '%s' (%s).\n", g_pszOutFile, strerror(errno));

    return 0;
}