Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions client/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,8 @@ DYLIBTYPE := $(shell if [ -f /usr/lib/libc.dylib ]; then echo dylib; else echo s

# GCC settings
DEBUG_OPTIM = -g -O2
CFLAGS = $(DEBUG_OPTIM)
CXXFLAGS = $(DEBUG_OPTIM)
CFLAGS = $(DEBUG_OPTIM) -pthread
CXXFLAGS = $(DEBUG_OPTIM) -pthread
FNAPI_VERSION = $(FN_VER_MAJOR).$(FN_VER_MINOR)
CC = gcc
CXX = c++
Expand Down
6 changes: 5 additions & 1 deletion client/fn-internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ struct s_FrontierMemData
int binzipped;
unsigned char zipbuf[4096];
int zipbuflen;
void *zstate;
};
typedef struct s_FrontierMemData FrontierMemData;
FrontierMemData *frontierMemData_create(int zipped,int secured,const char *params1,const char *params2);
Expand Down Expand Up @@ -163,7 +164,10 @@ struct s_RSBlob
};
typedef struct s_RSBlob RSBlob;


void frontier_init_lock();
void frontier_init_unlock();
void frontier_lock();
int frontier_unlock();

char *frontier_str_now(char *);

Expand Down
59 changes: 35 additions & 24 deletions client/fn-zlib.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@
#include "zlib.h"

static z_stream *dezstream=0;
static z_stream *inzstream=0;

static void *fn_zalloc(void *opaque,uInt items,uInt size)
{
Expand All @@ -31,7 +30,7 @@ static void fn_zfree(void *opaque,void *address)
frontier_mem_free(address);
}

static void fn_decleanup()
void fn_gzip_cleanup()
{
if(dezstream!=0)
{
Expand All @@ -41,22 +40,16 @@ static void fn_decleanup()
}
}

static void fn_incleanup()
void fn_gunzip_cleanup(void **inzstreamp)
{
if(inzstream!=0)
if((inzstreamp != 0) && (*inzstreamp!=0))
{
inflateEnd(inzstream);
frontier_mem_free(inzstream);
inzstream=0;
inflateEnd((z_stream *)(*inzstreamp));
frontier_mem_free(*inzstreamp);
*inzstreamp=0;
}
}

void fn_gzip_cleanup()
{
fn_decleanup();
fn_incleanup();
}

long fn_gzip_str(const char *src,long src_size,char *dest,long dest_size)
{
int ret;
Expand All @@ -74,7 +67,7 @@ long fn_gzip_str(const char *src,long src_size,char *dest,long dest_size)
ret=deflateInit(dezstream,9);
if(ret!=Z_OK)
{
fn_decleanup();
fn_gzip_cleanup();
if(ret==Z_MEM_ERROR)
return FN_ZLIB_E_NOMEM;
return FN_ZLIB_E_OTHER;
Expand All @@ -86,7 +79,7 @@ long fn_gzip_str(const char *src,long src_size,char *dest,long dest_size)
ret=deflateReset(dezstream);
if(ret!=Z_OK)
{
fn_decleanup();
fn_gzip_cleanup();
return FN_ZLIB_E_OTHER;
}
}
Expand All @@ -102,7 +95,7 @@ long fn_gzip_str(const char *src,long src_size,char *dest,long dest_size)
return dest_size-(long)dezstream->avail_out;
}

fn_decleanup();
fn_gzip_cleanup();
if(ret==Z_BUF_ERROR)
return FN_ZLIB_E_SMALLBUF;
return FN_ZLIB_E_OTHER;
Expand All @@ -118,14 +111,20 @@ int fn_gzip_str2urlenc(const char *str,int size,char **out)
unsigned char *abuf=0;

if(size>MAX_STR2URL_SIZE) return FN_ZLIB_E_TOOBIG;

frontier_init_lock();
if(str[size-1]=='\n')
size--; // don't include trailing newline

frontier_log(FRONTIER_LOGLEVEL_DEBUG,__FILE__,__LINE__,"encoding request [%*s]",size,str);

zsize=(int)(((double)size)*1.001+12);
zbuf=frontier_mem_alloc(zsize);
if(!zbuf) return FN_ZLIB_E_NOMEM;
if(!zbuf)
{
frontier_init_unlock();
return FN_ZLIB_E_NOMEM;
}

zret=fn_gzip_str(str,size,(char *)zbuf,zsize);
if(zret<0) {ret=zret; goto end;}
Expand All @@ -143,15 +142,20 @@ int fn_gzip_str2urlenc(const char *str,int size,char **out)
end:
if(abuf) frontier_mem_free(abuf);
if(zbuf) frontier_mem_free(zbuf);
frontier_init_unlock();
return ret;
}

int fn_gunzip_init()
int fn_gunzip_init(void **inzstreamp)
{
int ret=Z_OK;

if(inzstream==0)
if(inzstreamp==0)
return Z_MEM_ERROR;

if(*inzstreamp==0)
{
z_stream *inzstream;
// open a stream and leave it open just like with deflate above
inzstream=frontier_mem_alloc(sizeof(*inzstream));
if(inzstream==0)
Expand All @@ -164,27 +168,34 @@ int fn_gunzip_init()
ret=inflateInit(inzstream);
if(ret!=Z_OK)
{
fn_incleanup();
fn_gunzip_cleanup((void **)&inzstream);
return ret;
}
*inzstreamp=inzstream;
}
else
{
// reuse existing stream
ret=inflateReset(inzstream);
ret=inflateReset((z_stream *)(*inzstreamp));
if(ret!=Z_OK)
{
fn_incleanup();
fn_gunzip_cleanup(inzstreamp);
return ret;
}
}

return ret;
}

int fn_gunzip_update(unsigned char *src,int *src_size,const unsigned char *dest,int *dest_size,int final)
int fn_gunzip_update(void **inzstreamp,unsigned char *src,int *src_size,const unsigned char *dest,int *dest_size,int final)
{
int ret;
z_stream *inzstream;

if(inzstreamp==0)
return Z_MEM_ERROR;
inzstream=*inzstreamp;

inzstream->next_in=(Bytef *)src;
inzstream->avail_in=(uLongf)*src_size;
inzstream->next_out=(Bytef *)dest;
Expand All @@ -206,7 +217,7 @@ int fn_gunzip_update(unsigned char *src,int *src_size,const unsigned char *dest,
}
// unsuccessful finish, clean up stream
frontier_log(FRONTIER_LOGLEVEL_DEBUG,__FILE__,__LINE__,"final inflate error message: %s",inzstream->msg);
fn_incleanup();
fn_gunzip_cleanup(inzstreamp);
}
else if(ret==Z_STREAM_END)
{
Expand Down
6 changes: 3 additions & 3 deletions client/fn-zlib.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@

long fn_gzip_str(const char *src,long src_size,char *dest,long dest_size);
void fn_gzip_cleanup();
int fn_gunzip_init();
int fn_gunzip_update(unsigned char *src,int *src_size,const unsigned char *dest,int *dest_size,int final);

int fn_gunzip_init(void **inzstreamp);
int fn_gunzip_update(void **inzstreamp,unsigned char *src,int *src_size,const unsigned char *dest,int *dest_size,int final);
void fn_gunzip_cleanup(void **inzstreamp);

#endif //__H__FN_ZLIB_H
4 changes: 4 additions & 0 deletions client/frontier-cpp.cc
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,10 @@ int frontier::init(const std::string& logfilename, const std::string& loglevel)
return ret;
}

void frontier::setThreadSafe()
{
frontier_setThreadSafe();
}

Connection::Connection(const std::string& server_url,const std::string* proxy_url)
{
Expand Down
Loading