コード例 #1
0
ファイル: WebObjects.c プロジェクト: LaurentDavery/wonder
/*
 *	send response to server
 */
static void sendResponse(HTTPResponse *resp)
{
   String *resphdrs;
#ifndef PROFILE
   FCGX_FPrintF(out,"Status: %d %s" CRLF,resp->status,resp->statusMsg);
#endif

   resphdrs = resp_packageHeaders(resp);
#ifndef PROFILE
   FCGX_PutS(resphdrs->text,out);
#endif
   str_free(resphdrs);
#ifndef PROFILE
   FCGX_PutS(CRLF, out);
#endif

#ifndef PROFILE

   /* resp->content_valid will be 0 for HEAD requests and empty responses */
   if (resp->content_valid) {
      while (resp->content_read < resp->content_length) {
         //fwrite(resp->content,sizeof(char),resp->content_valid,stdout);
	      FCGX_PutStr(resp->content, resp->content_valid, out);
		 if (resp_getResponseContent(resp, 1) == -1)
         {
         	break;
         }
      }
      //fwrite(resp->content,sizeof(char),resp->content_valid,stdout);
      FCGX_PutStr(resp->content, resp->content_valid, out);
   }
   FCGX_FFlush(out);
#endif
   return;		
}
コード例 #2
0
ファイル: request.c プロジェクト: nevali/containerware
static int
request_write_header_(void *data, const char *name, const char *value, int more)
{
	CONTAINER_REQUEST *me = (CONTAINER_REQUEST *) data;
	
	FCGX_PutS(name, me->out);
	FCGX_PutChar(':', me->out);
	FCGX_PutChar(' ', me->out);
	FCGX_PutS(value, me->out);
	FCGX_PutChar('\n', me->out);
	me->wbytes += strlen(name) + strlen(value) + 3;
	return 0;
}
コード例 #3
0
ファイル: fcgi_stdio.c プロジェクト: Letractively/caudium
int FCGI_fputs(const char *str, FCGI_FILE *fp)
{
    if(fp->stdio_stream)
        return fputs(str, fp->stdio_stream);
    else if(fp->fcgx_stream)
        return FCGX_PutS(str, fp->fcgx_stream);
    return EOF;
}
コード例 #4
0
ファイル: ip.c プロジェクト: Jamim/ip-fastcgi
int main(void)
{
	FCGX_Init();
	int socket = FCGX_OpenSocket(SOCKET_PATH, 0);
	char* remote_addr;

	FCGX_Request request;
	if (FCGX_InitRequest(&request, socket, 0) != 0)
		return 1;

	while (1) {
		FCGX_Accept_r(&request);
		remote_addr = FCGX_GetParam("REMOTE_ADDR", request.envp);

		FCGX_PutS("Content-type: text/plain\n\n", request.out);
		FCGX_PutS(remote_addr, request.out);
		FCGX_PutS("\n", request.out);

		FCGX_Finish_r(&request);
	}
}
コード例 #5
0
ファイル: global_func.cpp プロジェクト: srdgame/luasp
int lsp::lua_log(lua_State *L)
{
    const char* s=luaL_checkstring(L,1);

    log(LOG_INFO, "%s", s);
    FCGX_Request* r = (FCGX_Request*)luaL_lsp_get_io_ctx(L);
	if (r)
	{
		FCGX_PutS(s, r->err);
	}
    
    return 0;
}
コード例 #6
0
ファイル: global_func.cpp プロジェクト: srdgame/luasp
static inline void output_headers(lsp::REQBAG* bag)
{
	if (bag->header_out)
		return;
	std::map<std::string, std::string>::iterator ptr = bag->out_header.begin();
	std::stringstream ss;
	for (; ptr != bag->out_header.end(); ++ptr)
	{
		ss << ptr->first << ": ";
		ss << ptr->second << std::endl;
	}
	FCGX_PutS(ss.str().c_str(), bag->out);
	bag->header_out = true;
}
コード例 #7
0
ファイル: fcgiapp.c プロジェクト: oripka/bagunceiro
int FCGX_PutSm_internal(FCGX_Stream * stream, ...)
{
	int r = 0;
	va_list a;
	const char *s;
	va_start(a, stream);
	while ((s = va_arg(a, const char *)))
		if (FCGX_PutS(s, stream) == -1) {
			r = -1;
			break;
		}
	va_end(a);
	return r;
}
コード例 #8
0
int bridge_request_getinput(bridge_request_t *self, char **data)
{
	char *contentLength;
	char *buffer;
	int len = 0;

	if ((contentLength = FCGX_GetParam("CONTENT_LENGTH", self->request.envp)) != 0)
		len = strtol(contentLength, NULL, 10);

	if (len <= 0)
		return EINVAL;

	if ((buffer = malloc((size_t)len+1)) == 0) {
		FCGX_PutS("out of memory!", self->request.err);
		return ENOMEM;
	}
	if (FCGX_GetStr(buffer, len, self->request.in) != len) {
		FCGX_PutS("Got less data than expected.", self->request.err);
		return EINVAL;
	}
	buffer[len] = '\0';
	*data = buffer;
	return 0;
}
コード例 #9
0
ファイル: slash-fcgi.c プロジェクト: tinkertim/slash
static void
flush_headers(slash_context_t* ctx)
{
    sl_response_key_value_t* headers;
    size_t header_count, i;
    int sent_content_type = 0;
    if(ctx->sent_headers) {
        return;
    }
    ctx->sent_headers = 1;
    headers = sl_response_get_headers(ctx->vm, &header_count);
    FCGX_FPrintF(ctx->request.out, "Status: %d\r\n", sl_response_get_status(ctx->vm));
    for(i = 0; i < header_count; i++) {
        /* @TODO: do something not non-standard */
        if(strcasecmp(headers[i].name, "Content-Type") == 0) {
            sent_content_type = 1;
        }
        FCGX_FPrintF(ctx->request.out, "%s: %s\r\n", headers[i].name, headers[i].value);
    }
    if(!sent_content_type) {
        FCGX_PutS("Content-Type: text/html; charset=utf-8\r\n", ctx->request.out);
    }
    FCGX_PutS("\r\n", ctx->request.out);
}
コード例 #10
0
ファイル: AdUnionAdminI.cpp プロジェクト: bradenwu/oce
bool GetAllRequest::response() {
  if (!Request::response() && false)
    return false;

  Statement sql;
  sql << "SELECT id, type, name, budget, click_price, click_count FROM ad_union_ads";
  stringstream ss;
  try {
    mysqlpp::StoreQueryResult res = QueryRunner("ad_db", CDbRServer).store(sql);
    if (!res) {
      FCGX_FPrintF(_fcgi_out, "Content-type: text/html\r\n\r\n-3");
      return false;
    }
    ss << "Content-type: text/html\r\n\r\n[";
    for (size_t i = 0; i<res.num_rows(); ++i) {
      mysqlpp::Row row = res.at(i);
      if (i) {
        ss << ",";
      }

      string name = row["name"].c_str();
      jsonEscape(name);
      int click_count = (int)row["click_count"];
      int click_price = (int)row["click_price"];
      int budget = (int)row["budget"];

      ss << "{'id':'" << (long)row["id"]
         << "','type':" << (long)row["type"] 
         << ", 'name':'" << name 
         << "', 'remaining':" << budget - click_count * click_price
         << "}";
    }
    ss << "]";
  } catch (std::exception& e) {
    MCE_WARN("db err : " << e.what());
    FCGX_FPrintF(_fcgi_out, "Content-type: text/html\r\n\r\n-1");
    return false;
  } catch (...) {
    MCE_WARN("db unkown exception.");
    FCGX_FPrintF(_fcgi_out, "Content-type: text/html\r\n\r\n-2");
    return false;
  }
  MCE_DEBUG("response : " << ss.str());
  FCGX_PutS(ss.str().c_str(), _fcgi_out);
  return true;
}
コード例 #11
0
ファイル: fcgi_stdio.c プロジェクト: Letractively/caudium
int FCGI_puts(const char *str)
{
    int n;
    if(FCGI_stdout->stdio_stream) {
        n = fputs(str, FCGI_stdout->stdio_stream);
        if(n < 0)
            return n;
        else
            return fputc('\n', FCGI_stdout->stdio_stream);
    } else if(FCGI_stdout->fcgx_stream) {
        n = FCGX_PutS(str, FCGI_stdout->fcgx_stream);
        if(n < 0)
            return n;
        else
            return FCGX_PutChar('\n', FCGI_stdout->fcgx_stream);
    }
    return EOF;
}
コード例 #12
0
ファイル: Output.cpp プロジェクト: mandrake/lulzjs
JSBool
Output_flush (JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
    JS_BeginRequest(cx);
    JS_EnterLocalRootScope(cx);

    jsval property;
    JS_GetProperty(cx, obj, "content", &property);

    FCGX_PutS(JS_GetStringBytes(JS_ValueToString(cx, property)), ((LCGIData*) JS_GetContextPrivate(cx))->cgi->out);

    property = JS_GetEmptyStringValue(cx);
    JS_SetProperty(cx, obj, "content", &property);

    JS_LeaveLocalRootScope(cx);
    JS_EndRequest(cx);

    return JS_TRUE;
}
コード例 #13
0
ファイル: global_func.cpp プロジェクト: srdgame/luasp
int lsp::io_def_puts(void* ctx,const char* s) { 
	REQBAG *bag = (REQBAG*)ctx;
	
	output_headers(bag);
	return FCGX_PutS(s, bag->out); 
}
コード例 #14
0
ファイル: request.cpp プロジェクト: dnovikoff/tride
Request& Request::operator<<(const char* const out) {
	FCGX_PutS(out, request.out);
	return *this;
}
コード例 #15
0
void bridge_request_fatal(bridge_request_t *self)
{
	FCGX_PutS("Status: 400 Bad Request\r\n\r\n", self->request.out);
	FCGX_PutS("Status: 400 Bad Request\n", self->request.err);
}
コード例 #16
0
void bridge_request_transmit(bridge_request_t *self, struct json_object *obj)
{
	FCGX_PutS("Content-type: application/json\r\n\r\n", self->request.out);
	FCGX_PutS(json_object_to_json_string(obj), self->request.out);
}
コード例 #17
0
ファイル: main.cpp プロジェクト: srdgame/luasp
int lsp::luabag_run(LUABAG* luabag, FCGX_Request* r)
{
	int handler_type = handler_type_unknown;

	char* handler = FCGX_GetParam("SCRIPT_NAME", r->envp);

	if(handler)
    {
		handler=strrchr(handler,'.');
		if(!handler)
		{
			log(LOG_ERR, "%s", "Script name has no extension name");
			return -1;
		}
		if(!strcmp(handler,".lsp") || !strcmp(handler,".lp") ) 
			handler_type = handler_type_lsp;
		else if(!strcmp(handler,".lua"))
		{
			handler_type = handler_type_lua;
			log(LOG_ERR, "%s", "lua handler");
		}
		else
		{
			log(LOG_ERR, "%s:%s", "Not correct extension name, valid extension are lp, lsp, lua", handler);
			return -1;
		}
    }
	else
	{
		log(LOG_ERR, "%s", "Not script name");
		return -1;
	}

    lsp_io lio={r, lputs:io_def_puts, lputc:io_def_putc, lwrite:io_def_write};

    luaL_lsp_set_io(luabag->L,&lio);

	char* p = FCGX_GetParam("REQUEST_METHOD", r->envp);
	if(p && !strcmp(p,"POST"))
    {
		int rc = read_request_data(luabag->L);
		if(rc!= 0)
			return rc;
    }

	p = FCGX_GetParam("QUERY_STRING", r->envp);
    luaL_lsp_setargs(luabag->L, p, p ? strlen(p) : 0);

    lua_getfield(luabag->L,LUA_GLOBALSINDEX,"env");    
    //luaL_lsp_setfield(luabag->L,"server_admin",r->server->server_admin);
    luaL_lsp_setfield(luabag->L,"server_hostname", FCGX_GetParam("SERVER_NAME", r->envp));
    luaL_lsp_setfield(luabag->L,"remote_ip",FCGX_GetParam("REMOTE_ADDR", r->envp));
    luaL_lsp_setfield(luabag->L,"remote_host",FCGX_GetParam("REMOTE_ADDR", r->envp));
    luaL_lsp_setfield(luabag->L,"remote_port",FCGX_GetParam("REMOTE_PORT", r->envp));
    luaL_lsp_setfield(luabag->L,"local_ip", FCGX_GetParam("SERVER_ADDR", r->envp));
	luaL_lsp_setfield(luabag->L,"local_host",FCGX_GetParam("SERVER_NAME", r->envp));
    luaL_lsp_setfield(luabag->L,"local_port",FCGX_GetParam("SERVER_PORT", r->envp));
	char hostname[256];
	if (0 == gethostname(hostname, 256))
	{
		luaL_lsp_setfield(luabag->L,"local_host", hostname);
		luaL_lsp_setfield(luabag->L,"hostname", hostname);
	}
    luaL_lsp_setfield(luabag->L,"method", FCGX_GetParam("REQUEST_METHOD", r->envp));
    luaL_lsp_setfield(luabag->L,"handler", handler);
    luaL_lsp_setfield(luabag->L,"uri", FCGX_GetParam("REQUEST_URI", r->envp));
    luaL_lsp_setfield(luabag->L,"doc_uri", FCGX_GetParam("DOCUMENT_URI", r->envp));
    luaL_lsp_setfield(luabag->L,"doc_root", FCGX_GetParam("DOCUMENT_ROOT", r->envp));
	char* filename = FCGX_GetParam("SCRIPT_FILENAME", r->envp);
    luaL_lsp_setfield(luabag->L,"filename", filename);
    luaL_lsp_setfield(luabag->L,"accept_lang", FCGX_GetParam("HTTP_ACCEPT_LANGUAGE", r->envp));
    lua_pop(luabag->L,1);
    
    luaL_lsp_chdir_to_file(luabag->L, filename);
    
    luaL_lsp_session_init(luabag->L,
			!g_conf->cookie_name.empty() ? g_conf->cookie_name.c_str() : "LSPSESSID",
			g_conf->cookie_days > 0 ? g_conf->cookie_days : 7,
			!g_conf->cookie_path.empty() ? g_conf->cookie_path.c_str() : "/");
    
    int status=0;
    
    switch(handler_type)
    {
		case handler_type_lsp: 
			status=luaL_load_lsp_file(luabag->L, filename); 
			header_table_set(r, "CONTENT-TYPE", "text/html");
			break;
		case handler_type_lua:
			status=luaL_loadfile(luabag->L, filename);
			header_table_set(r, "CONTENT-TYPE", "text/plain");
			break;
    }

    if(status)
    {
		const char* e=lua_tostring(luabag->L,-1);
		FCGX_PutS(e, r->err);

		log(LOG_ERR, "%s", e);

        lua_pop(luabag->L,1);
		luaL_lsp_chdir_restore(luabag->L);
		return 500;
    }

    status=lua_pcall(luabag->L,0,LUA_MULTRET,0);
	// won't return other than 0, as the code has been excuted with outputs
    
    if(status)
    {
		const char* e=lua_tostring(luabag->L,-1);

		log(LOG_ERR, "%s", e);
		FCGX_PutS(e, r->err);

		if(g_conf->show_exception)	// if not 0
			FCGX_PutS(e, r->err);

		lua_pop(luabag->L,1);
    }
    

    int rnum=lua_gettop(luabag->L);

    int result = 0;
    
    if(rnum>0)
    {
		result = lua_tointeger(luabag->L,-1);

		if(!result || result==200)
			result = 0;

		lua_pop(luabag->L,rnum);
    }

    luaL_lsp_chdir_restore(luabag->L);

	/*
    if(result == 0)
		FCGX_FFlush(r->out);
	else
		FCGX_FFlush(r->err);
		*/

    return result;
}
コード例 #18
0
ファイル: AdUnionAdminI.cpp プロジェクト: bradenwu/oce
bool GetOneRequest::response() {
  if (!Request::response() && false)
    return false;
  long aid = getPropertyLong("id");

  Statement sql;
  sql << "SELECT id, type, name, owner_id, group_id, campaign_id, budget, daily_budget, "\
      "click_price, click_count, title, content, img_url, dest_url, update_time FROM ad_union_ads WHERE id=" << aid;
  stringstream ss;
  try {
    mysqlpp::StoreQueryResult res = QueryRunner("ad_db", CDbRServer).store(sql);
    if (!res) {
      FCGX_FPrintF(_fcgi_out, "Content-type: text/html\r\n\r\n-3");
      return false;
    }
    ss << "Content-type: text/html\r\n\r\n[";
    for (size_t i = 0; i<res.num_rows(); ++i) {
      mysqlpp::Row row = res.at(i);
      if (i) {
        ss << ",";
      }

      string name = row["name"].c_str();
      jsonEscape(name);
      int click_count = (int)row["click_count"];
      int click_price = (int)row["click_price"];
      int budget = (int)row["budget"];

      string title = row["title"].c_str();
      jsonEscape(title);
      string content = row["content"].c_str();
      jsonEscape(content);
      for(size_t i = 0; i < content.size(); ++i) {
        if (content[i] == '\r' || content[i] == '\n') {
          content[i] = ' ';
        }
      }

      ss << "{'id':'" << (long)row["id"] << '\''
         << ",'type':" << (long)row["type"] 
         << ", 'name':'" << name  << '\''
         << ", 'owner_id':'" << row["owner_id"] << '\''
         << ", 'group_id':'" << row["group_id"] << '\''
         << ", 'campaign_id':'" << row["campaign_id"] << '\''
         << ", 'budget':'" << budget << '\''
         << ", 'click_price':'" << click_price << '\''
         << ", 'click_count':'" << click_count << '\''
         << ", 'daily_budget':'" << row["daily_budget"] << '\''
         << ", 'title':'" << title << '\''
         << ", 'content':'" << content << '\''
         << ", 'img_url':'" << row["img_url"] << '\''
         << ", 'dest_url':'" << row["dest_url"] << '\''
         << ", 'update_time':'" << row["update_time"] << '\''
         << "}";
    }
    ss << "]";
  } catch (std::exception& e) {
    MCE_WARN("db err : " << e.what());
    FCGX_FPrintF(_fcgi_out, "Content-type: text/html\r\n\r\n-1");
    return false;
  } catch (...) {
    MCE_WARN("db unkown exception.");
    FCGX_FPrintF(_fcgi_out, "Content-type: text/html\r\n\r\n-2");
    return false;
  }
  MCE_DEBUG("response : " << ss.str());
  FCGX_PutS(ss.str().c_str(), _fcgi_out);
  return true;
}