2013-09-03 2 views
0

현재 몽구스 웹 서버를 임베드하는 응용 프로그램을 만들고 있습니다. 경우에 따라 begin_request_handler 내부에서 추가 기능을 호출하여 원하는 HTTP 헤더를 만들어야합니다. 이 과정에서 이후에 논문 처리 기능이 으로 요청 처리기가 완료되었음을 알게되었습니다. 예를 들면 다음과 같습니다mongoose begin_request_handler 콜백 함수 호출하기

void test() { 
    printf("HELLO"); 
} 

static int begin_request_handler(struct mg_connection *conn) { 
    test(); 
    const struct mg_request_info *request_info = mg_get_request_info(conn); 
    ... 
    return 1; 
} 

헬로우 브라우저가 TCP 연결을 종료 후 바로 인쇄지고 있습니다. 콜백 내부에서 함수를 호출하는 방법조차 있습니까? 아니면 방금 뭔가 빠졌습니까?

답변

0
  1. 원하는 HTTP 헤더를 만들려는 경우. 그렇다면 위에서 언급 한 함수 (begin_request_handler)이 올바른 접근 방식이 아닐 수도 있습니다. 구조 의 필드 인 구조 mg_request_info을 조사하십시오. 여기서 헤더의 이름과 값이 설정됩니다. 이 구조는 연결 설정 후 맨 처음에 채워집니다. 또한 pull()read()을보십시오. 이것은 모든 데이터가 설정된지면 수준의 기능입니다.

  2. 그리고 콜백에서 함수를 호출하는 방법이 있습니다. 자신의 콜백을 작성하고 구조체가 mg_context임을 가리키는 콜백 함수를 만들어 콜백을 가리 키도록 할 수 있습니다. 그리고 handle_request()에서 적절하게 호출 할 수 있습니다. 당신은 mongoose.h에 struct mg_callbacks에 추가 할 수 있습니다

예 :

memset 함수 (& 콜백, 0, sizeof 연산자 (콜백));
callbacks.begin_request => begin_request_handler;

// begin_request_handler 대신 함수를 배치하십시오.
// 웹 서버를 시작하십시오.

ctx = mg_start (& 콜백, NULL, 옵션);

은에 당신이 아마 관심이 더 이상 세부 사항을 지정하십시오.

0

글쎄, 그것을 얻었다. stdout의 printf() 버퍼에 혼동을 느낀다. 메소드는 적절한 시간에 호출되지만 결과는 표시되지 않습니다. 어쨌든 고맙습니다.