/*******************************************************************************/
/*                                                                             */
/*  Copyright 2005 Pascal Gloor <pascal.gloor@spale.com>                       */
/*                                                                             */
/*  Licensed under the Apache License, Version 2.0 (the "License");            */
/*  you may not use this file except in compliance with the License.           */
/*  You may obtain a copy of the License at                                    */
/*                                                                             */
/*     http://www.apache.org/licenses/LICENSE-2.0                              */
/*                                                                             */
/*  Unless required by applicable law or agreed to in writing, software        */
/*  distributed under the License is distributed on an "AS IS" BASIS,          */
/*  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   */
/*  See the License for the specific language governing permissions and        */
/*  limitations under the License.                                             */
/*                                                                             */
/*******************************************************************************/

#include <inttypes.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>


#define CGI_MAX_VARS 1024

#define CGI_GET_ONLY  0x01
#define CGI_POST_ONLY 0x02

/* struct for each GET/POST variable */
struct CGIVar {
	char    *name;     /* field name */
	char    *filename; /* filename in case of file upload */
	char    *ctype;    /* content type */
	char    *value;    /* data */
	size_t  value_len; /* data lenght */
};

typedef void          CGI_CTX;
typedef struct CGIVar CGI_VAR;


extern CGI_CTX            *CGI_Init     (void);
extern CGI_VAR            *CGI_FindVar  (CGI_CTX*, char*);
extern CGI_VAR            *CGI_NextVar  (CGI_CTX*);
extern void                CGI_FirstVar (CGI_CTX*);
extern void                CGI_End      (CGI_CTX*);
extern int                 CGI_Parse    (CGI_CTX*, const int, size_t);
extern struct sockaddr_in *CGI_Peer     (CGI_CTX*);