help-cgicc
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[help-cgicc] cant create cookie, please help


From: Ben Kuang
Subject: [help-cgicc] cant create cookie, please help
Date: Mon, 18 Apr 2005 20:22:45 -0400

Hi: 

I am using the HTTPCookie class in cgicc/HTTPCookie.h, however, after
I do the following:

HTTPCookie lib;
lib.setName("Honey");
lib.setValue("Hello");

I dont see a cookie created in the browser's cookie directory.  Do any
of you know why this is happening?  Thank you very much.

the whole program C++ file is as follows:

/************************************************
* CCGIItem::GetLength                           *
* Retrieves the length of the value             *
* Return value: the length of the value, 0 if   *
* there was no parseable value                  *
************************************************/

int CCGIItem::GetLength()
{
        return strlen(m_lpszValue);
}

/************************************************
* CCGIItem::GetNameLength                       *
* Retrieves the length of the name              *
* Return value: the length of the name, 0 if    *
* there was no parseable name                   *
************************************************/

int CCGIItem::GetNameLength()
{
        return strlen(m_lpszName);
}

/************************************************
* CCGIItem::GetValue                            *
* Retrieves the value                           *
* Parameters: lpszBuffer - pointer to buffer to *
*                          receive value        *
*             cbBufferLength - length in bytes  *
*                              of lpszBuffer    *
* Return value: 0 if success, -1 if failure     *
************************************************/

int CCGIItem::GetValue(char* lpszBuffer, int cbBufferLength)
{
        if(m_lpszValue == NULL)         // die if the value of this
item has not been set
                return -1;

        if(cbBufferLength < GetLength())        // die of lpszBuffer
is too small
                return -1;

        strcpy(lpszBuffer, m_lpszValue);        // copy value into lpszBuffer

        return 0;       // success
}

/************************************************
* CCGIItem::GetName                             *
* Retrieves the name of this item               *
* Parameters: lpszBuffer - buffer to be filled  *
*                          with item name       *
*             cbBufferLength - length, in bytes,*
*                              of lpszBuffer    *
* Return value: 0 if success, -1 if error       *
************************************************/

int CCGIItem::GetName(char* lpszBuffer, int cbBufferLength)
{
        if(m_lpszName == NULL)  // die if the name of this item has not been set
                return -1;

        if(cbBufferLength < GetNameLength())    // die if lpszBuffer
is too small
                return -1;

        strcpy(lpszBuffer, m_lpszName); // copy name into lpszBuffer

        return 0;       // success
}

/************************************************
* CCGIItem::SetValue                            *
* Sets this item's value                        *
* Parameters: lpszBuffer - pointer to string    *
*                          containing value     *
* Return value: 0 if success, -1 if error       *
************************************************/

int CCGIItem::SetValue(char* lpszBuffer)
{
        int cbBufferLength;

        if(m_lpszValue)                 // if a value for this item
has already been set,
                free(m_lpszValue);      // deallocate it

        cbBufferLength = strlen(lpszBuffer);    // get length of value

        if(cbBufferLength == 0)         // die if we couldn't get the
length for whatever reason
                return -1;

        m_lpszValue = (char*) malloc(cbBufferLength + 1);       //
allocate a buffer

        if(m_lpszValue == NULL) // die if allocation failed
                return -1;

        strcpy(m_lpszValue, lpszBuffer);        // copy value into buffer

        return 0;       // success
}

/************************************************
* CCGIItem::SetName                             *
* Sets the name of this item                    *
* Parameters: lpszBuffer - pointer to string    *
*                          containing name      *
* Return value: 0 if success, -1 if failure     *
************************************************/

int CCGIItem::SetName(char* lpszBuffer)
{
        int cbBufferLength;

        if(m_lpszName)                  // if a name has already been
set, deallocate it
                free(m_lpszName);

        cbBufferLength = strlen(lpszBuffer);    // get length of name

        if(cbBufferLength == 0) // die if we couldn't get the length
for whatever reason
                return -1;

        m_lpszName = (char*) malloc(cbBufferLength + 1); // allocate a buffer

        if(m_lpszValue == NULL) // die if allocation failed
                return -1;

        strcpy(m_lpszName, lpszBuffer); // copy name into buffer

        return 0;
}




/* CCGI Constructor */

CCGI::CCGI()
{
        m_lpszRawData = NULL;
}

/* CCGI Deconstructor */

CCGI::~CCGI()
{
        if(m_lpszRawData)       // if a buffer was allocated for data,
deallocate it
                free(m_lpszRawData);
}

/************************************************
* CCGI::Load                                    *
* Retrieves CGI input data from stdin           *
* Return value: 0 if success, -1 if error       *
************************************************/

int CCGI::Load()
{
        char* lpszContentLength;
        int nContentLength;

        lpszContentLength = getenv("CONTENT_LENGTH");   // retrieve
CONTENT_LENGTH environment variable

        if(lpszContentLength == NULL)   // die if we couldn't get it
                return -1;                                      //
this probably means the program is NOT being run under CGI

        nContentLength = atoi(lpszContentLength);       // atoi it

        if(nContentLength == 0) // die if it's 0
                return -1;

        m_lpszRawData = (char*) malloc(nContentLength+1);       //
allocate a buffer

        if(m_lpszRawData == NULL)       // die if allocation failed
                return -1;

        memset(m_lpszRawData, 0, nContentLength+1);     // zero out the buffer

        if(fread(m_lpszRawData, 1, nContentLength, stdin) == 0) // get the data
                return -1;

        if(ferror(stdin))       // die if there was an fread error
                return -1;

        return 0;       // success
}

/************************************************
* CCGI::GetItemCount                            *
* Retrieve number of items                      *
* Return value: number of items, or -1 if error *
************************************************/

int CCGI::GetItemCount()
{
        if(m_lpszRawData == NULL)       // die if there is no data
                return -1;

        char* pbuf = m_lpszRawData;     // get a working pointer to data
        int nItemCount = 1;

        while(pbuf = strchr(pbuf,'&'))  // as long as we can find a '&'
        {
                pbuf++;                                         // put
pbuf to start of next item
                nItemCount++;                           // increment nItemCount
        }

        return nItemCount;      // success, return count
}

/************************************************
* CCGI::GetItem                                 *
* Retrieves an item                             *
* Parameters: nItemIndex - zero-based index of  *
*                          item to retrieve     *
*             pItem - pointer to CCGIItem object*
*                     that will be filled       *
* Return value: 0 if success, -1 if error       *
************************************************/

int CCGI::GetItem(int nItemIndex, CCGIItem* pItem)
{
        // working pointers
        char *lpszItem,*lpszItemEnd,*lpszItemBuf,*lpszNameBuf,*lpszValueBuf;
        int i,nItemLength,nNameLength;

        lpszItem = m_lpszRawData;       // get working pointer to data

        // move to the requested item

        for(i=0; i<nItemIndex; i++)
        {
                lpszItem = strchr(lpszItem,'&');        // find '&'

                if(lpszItem == NULL)                            // if
we couldn't find it, then the index is invalid
                        return -1;

                lpszItem++;             // move pointer to start of next item
        }

        // find the end of the item

        lpszItemEnd = strchr(lpszItem,'&');

        if(lpszItemEnd == 0)                                    // if
there's no end, this is the last item...
                nItemLength = strlen(lpszItem);         // set it to
the length of the remaining string
        else                                                          
         // otherwise, get length via pointer subtraction
                nItemLength = lpszItemEnd - lpszItem;

        lpszItemBuf = (char*) malloc(nItemLength+1);    // allocate a
buffer for the item

        if(lpszItemBuf == NULL) // die if allocation failed
                return -1;

        memset(lpszItemBuf, 0, nItemLength+1);          // zero out the buffer

        memcpy(lpszItemBuf, lpszItem, nItemLength);     // copy item into buffer

        lpszValueBuf = strchr(lpszItemBuf,'=');         // now, find
the = separating name and value

        if(lpszValueBuf == NULL)        // if we couldn't find the =,
this is not valid CGI input; die
        {
                free(lpszItemBuf);
                return -1;
        }

        nNameLength = lpszValueBuf - lpszItemBuf;       // get the
length of the name

        lpszValueBuf++; // increment the value pointer past the =

        lpszNameBuf = (char*) malloc(nNameLength + 1);  // allocate a
buffer for the name

        if(lpszNameBuf == NULL) // die if allocation failed
        {
                free(lpszItemBuf);
                return -1;
        }

        memset(lpszNameBuf, 0, nNameLength + 1);        // zero out the buffer

        memcpy(lpszNameBuf, lpszItemBuf, nNameLength);  // copy name into buffer

        // set the value and name of the CCGIItem passed to us

        if((pItem->SetValue(lpszValueBuf) == -1) ||
(pItem->SetName(lpszNameBuf) == -1))
        {
                // free buffers and die if this failed

                free(lpszItemBuf);
                free(lpszNameBuf);
                return -1;
        }

        // free buffers

        free(lpszNameBuf);
        free(lpszItemBuf);

        return 0; // success
}




reply via email to

[Prev in Thread] Current Thread [Next in Thread]