/***************************************************************************
                ftsd ( File TranSfer Daemon ) Header ( Listener.h )
                -----------------------------------------
	begin      : 2010/03/05
	copyright  : (C) 2005 SolutionBox Inc.
	author     : Service 1 Team
	email      : svc1@solbox.com
	version    : 1.0

	CopyRight(C) 2005 SolutionBox Inc. All Rights reserved.
	Redistribution and use in source and binary forms, with or with out
	modification, are not permitted in outside of SolutionBox Inc.
***************************************************************************/

#ifndef __LISTENER_H__
#define __LISTENER_H__

#include "../define_ftsd.h"

#include <string>


#ifdef __cplusplus
extern "C" {
#endif

	/// @brief 현재 Process가 기동중인지 여부를 판단하기 위한 함수( 프로세스 중복 실행 체크)
	/// @return 이미 해당 프로세스가 기동 중인 경우 true 반환, 그렇지 않으면 false 반환.
	bool IsCurrentProcessRun( void );

	/// @brief std 상에 trim 함수가 없어서 직접 구현 아니면 boost/algorithm/string.hpp 상의 boost::trim 함수 사용
	/// @param str [in/out] Trim 할 문자열을 저장한 String 참조변수.
	/// @return void
	void Trim( std::string & str );

	/// @brief Daemon Process 생성처리
	/// @return 0 인 경우 성공, -1 인 경우 오류발생
	int MakeDaemon( void );

	/// @brief Worker Process 생성(fork) 처리 함수
	/// @param listenSocket [in] Listen Socket
	/// @return 생성 성공시 true, 실패시에는 false 를 반환.
	bool MakeProcessWorker( int listenSocket );

	/// @brief Worker Process 재생성(fork) 처리 함수
	/// @param listenSocket [in] Listen Socket
	/// @return 생성 성공시 true, 실패시에는 false 를 반환.
	bool RemakeProcessWorker( int listenSocket );

	/// @brief Listener 프로세스 signal 처리 설정을 위한 함수	
	/// @return void	
	void SetSignalListener( void );

	/// @brief Listen 처리를 위한 Socket 생성 함수
	/// @param listenSocket [out] 생성된 Socket 정보를 저장하기 위한 참조변수
	/// @return 성공시 true, 오류발생시 false 반환.
	bool MakeListenSocket( int& listenSocket );


	/* Signal 처리를 위한 각 Signal Handler 함수는 
	 * 다른 Code 에서 Include 처리시 Static 관련 문제로 인해 
	 * 본 Header 에서 선언처리 하지 않음. cpp 에만 존재 
	 */


#ifdef __cplusplus
}
#endif


#endif /* __LISTENER_H__ */



