2004-08-11  Sriram Swaminathan  <sriram.swaminathan@sun.com>
  * IIIMP_hotkey.cpp

  While creating the candidate list for drawing the Language Selection
  Window, check if HRN is valid. If HRN is NULL then use the IMName.

2004-08-11  Sriram Swaminathan  <sriram.swaminathan@sun.com>
  * IIIMP_hotkey.cpp
  * IIIMP_IMState.cpp

  Fixed typo

2004-08-11  Sriram Swaminathan  <sriram.swaminathan@sun.com>
  * IIIMP_hotkey.cpp
  * IIIMP_hotkey.hh

  Added iiimp_hotkey_state_notify() in server to notify the client
  to change its current state to 'FORWARDING ON' or 'FORWARDING OFF'

2004-08-11  Akira TAGOH  <tagoh@redhat.com>

	* IMBasicObject.cpp(IMObjectMgr::add): use LOG_CRITICAL for seriously
	  failed message in order to notify it to syslog and to find it out
	  easily for people.
	* LEMgr.cpp(LEMgr::listup_LEs): likewise.
	* IMUtil.cpp(IMSocketAddress::create_sockets): likewise.
	* IIIMProtocol.cpp(IIIMProtocol::accept): likewise.
	* IMLog.hh: extended IMLOG_DEFINE_FUNC to make a function to enforce
	  to output the message to syslog.
	  created LOG_CRITICAL function to output the message as IMLog::ERROR
	  level to both of stderr and syslog.
	* watchdog.c(zalloc): use syslog(3) instead of perror(3).
	(is_load_or_cpu_low): likewise.
	(main): likewise. and added new command line option -retryonerror to
	  specify the number of times for retry when starting htt_server was
	  failed.

2004-07-21  Hidetoshi Tajima  <hidetoshi.tajima@sun.com>

	fix build failures on Solaris
	
	* IMSvrCfg.cpp: check for non-posix getpwuid_r
	* iwrap.c : check for non-posix getpwuid_r
	* IMUtil.cpp (setup_unix): s/sun/sun_addr
	* IIIMP_hotkey.hh (class IIIMP_hotkey):
	set_hotkey_mode and set_lang_selection don't take return value

2004-07-14  Motonobu Ichimura <famao@openi18n.org>

        * IMSvrCfgFile.cpp: fix a bug when listenaddress is
        not empty, htt_server does crash.

2004-07-13  Motonobu Ichimura <famao@openi18n.org>

        * IMSvrArg.cpp, IMSvrCfgFile.cpp:  bugfix.

2004-07-12  Motonobu Ichimura <famao@openi18n.org>

        * IMSvrCfg.cpp, IMSvrCfg.hh
        (IMSvrCfg::get_process_user)
        (IMSvrCfg::get_home_dir): new function.

        * IMUtil.cpp: use delete[] instead of free

        * IMSvrArg.cpp: 

        if -user option is set, use ~/.iiim/htt.conf as a configuration file.
        bugfix.

        * IMSvrCfgFile.cpp:

        remove unneeded messages.

        (IMSvrCfgFile::add_ssl_listen_file)
        (IMSvrCfgFile::add_listen_file): use IMSvrCfg::get_process_user
        to get a user name.

2004-07-12  Motonobu Ichimura <famao@openi18n.org>

        * IMSvrCfgFile.cpp, IMSvrCfgFile.hh:

        (IMSvrCfgFile::add_ssl_listen_file)
        (IMSvrCfgFile::add_ssl_listen_address)
        (IMSvrCfgFile::add_certificate_file)
        (IMSvrCfgFile::add_certificate_keyfile)
        (IMSvrCfgFile::add_cacertificate_file)
        (IMSvrCfgFile::add_cacertificate_path)
        (IMSvrCfgFile::set_verify_client)
        (IMSvrCfgFile::set_verify_depth) :  new function.

        * IMTLS.cpp, IMTLS.hh: added

        * IMUtil.hh: 

        add IMSocketAddress::ADDRESS_TYPE.
        add IMSocket::trans_type.
        move IMSocketTrans(int fd) to a public function.
        move IMSocketTrans::recv,send to a virtual function.


2004-06-23  Hidetoshi Tajima  <hidetoshi.tajima@sun.com>

	* IMSvrCfgFile.cpp: add unistd.h for geteuid, or build fails
	on JDS.

2004-06-19  Motonobu Ichimura <famao@openi18n.org>

	* IMSvrCfgFile.cpp, IMSvrCfgFile.hh
	* IMUserMgr.cpp, IMUserMgr.hh:
	* IMUtil.hh, IMUtil.cpp:
	* iwap.h, iwap.c:
	* IMAuth.cpp, IMAuth.hh:
	* IMSvrCfg.hh, IMSvrCfg.cpp:
	* IMSvrArg.cpp:
	add unix domain support.
	add -user option.

2004-06-17  Motonobu Ichimura <famao@openi18n.org>

	* IMSignal.hh, IMSignal.cpp:
	use RETSIGTYPE

2004-06-16  Motonobu Ichimura <famao@openi18n.org>

	* IMSvr.cpp,IMSvr.hh:
	* LEMgr.cpp, LEMgr.hh:
	* LE.hh, LE.cpp:
	reloading LEs when IIIMSF receives SIGHUP signal.
	
2004-05-03  Hidetoshi Tajima  <hidetoshi.tajima@sun.com>

	* IIIMP_ICState.cpp:
	- aux_getvalues(): use IMAuxGetEvent, instead of IMAuxEvet.

	- scope of auxnamev, intvalv, imtextvec should be same as aux_draw - 
	fixed.

	- FIXME: The pilist and pstrh must be freed, but freeing them will
	cause htt_server to freeze. We'll need to fix this memory leak.

2004-04-30  Motonobu Ichimura  <famao@momonga-linux.org>

	* IMBasicObject.cpp (IMLangMatchPredicate::IMLangMatchPredicate):
	add some locales

2004-04-22  Motonobu Ichimura  <famao@openi18n.org>

	* IMUtil.cpp (IMSocketTrans::accept): fix a bug if the system
	only supports the select(2) function.

2004-03-30  Hidetoshi Tajima  <tajima@SFBay.Sun.COM>

	* IIIMP_ICState.cpp: use IM_EventAuxSet(=4) and IM_EventAuxGet(=5)
	to distinguish aux request events by event->type.

2004-03-29  Hidetoshi Tajima  <tajima@SFBay.Sun.COM>

	* IIIMP_ICState.hh, IIIMP_ICState.cpp: added aux_getvalues()

2004-02-13  Hidetoshi Tajima  <hidetoshi.tajima@sun.com>

	* IMDesktop.cpp, IMDesktop.hh:
	make one IMDesktop for the same user on the same host and
	display.

2003-12-02  Hidetoshi Tajima  <hidetoshi.tajima@sun.com>

	* LE.cpp, LE.hh:
	  Change lifecycles of session contexts and interface module.
	 - open session contexts per single interface module.
	 - close interface module when the last lecontext is destroyed.
	  Added:
	    typedef list<LEContext*> LEContextList;
	    LEBase::remove_lecontext().
	    iml_if_t *iml_if_context
	    int iml_if_context_ref_count;

2003-11-19  Motonobu Ichimura  <famao@momonga-linux.org>

	* LE.cpp (LEBase::LEBase): fix a missing initialization for iml_if.
	patch from Yu Shao <yshao@redhat.com>


2003-09-03  MIYASHITA Hisashi  <himi@li18nux.org>

	* LE.cpp (LEContext::initialize): Call get_le_context_args() on
	the input context for args before calling set_values().

	* IMInputContext.hh (class IMInputContext):
	Added a new member function, get_le_context_args()

	* IMInputContext.cpp: Include IMLog.hh.
	(IMInputContext::get_current_lecontext): When failing to create LEContext,
	output an error.
	(IMInputContext::get_lecontext_args): New function.
	(IMInputContext::send_event): If failing to get the
	current context, return false immediately.
	(IMInputContext::toggle_conversion): Likewise.
	(IMInputContext::reset): Likewise.
	(IMInputContext::toggle_focus): Likewise.

	* IIIMPUtil.cpp
	(convert_iiimp_icattr<IIIMP_ICATTRIBUTE_CHARACTER_SUBSETS>):
	Set IMCharSubsets of icattr.

	* Makefile.am (htt_server_SOURCES): Added ICHandler.cpp.

	* ICHandler.cpp: New file.

	* ICHandler.hh (class IMCharSubsets): Implemented.

2003-08-23  MIYASHITA Hisashi  <himi@li18nux.org>

	* IMDesktop.cpp (unknown_display_name): New const. string.
	(create_iml_desktop): When it fails to find an appropriate
	display name, set unknown_display_name instead.
	(create_iml_desktop): Pass LEBase's iml_if to new_user().

	* IMDesktop.hh (IMDesktop::iml_desktop): Removed.
	It has been never used.

2003-08-11  MIYASHITA Hisashi  <himi@li18nux.org>

	* LE.cpp (initialize): Before using args for get_lecontext_args(),
	do args.clear().
	(iml_execute_iml_wrapper): If DEBUG is defined, output the issuing
	IML instructions.

2003-08-09  MIYASHITA Hisashi  <himi@li18nux.org>

	* IMAuth.cpp (IMAuth::set_fd_from): Instead of name, I defined ss as
	struct sockaddr_storage, and also defined pname as struct sockaddr_storage*
	to point ss, and apply pname to getnameinfo and getaddrinfo.
	(IMAuth::set_fd_from): Don't specify NI_NAMEREQD to resolve the address
	of fd.
	(IMAuth::set_fd_from): Use pst->ai_addrlen when applying pst->ai_addr to
	getnameinfo().

2003-07-30  MIYASHITA Hisashi  <himi@li18nux.org>

	* IMAuth.cpp (IMAuth::set_fd_from): Define from_address2
	as an array.  And allocate from_address before setting an
	address to it.

	* IIIMPUtil.cpp (convert_IMText_to_iiimp_text): When
	pimtext is NULL, create an empty IMText.

	* IMAuth.cpp (IMAuth::addr6_element_to_number): Made it
	adapt to the zero compression format.
	(IMAuth::store_addr6_pattern): Likewise, and check the format
	strictly.
	(IMAuth::set_fd_from): Deal with the case of AF_INET6.

2003-07-26  MIYASHITA Hisashi  <himi@li18nux.org>

	* IIIMProtocol.cpp (IIIMProtocol::restart): Call
	pimls->listen() in this method.
	(IIIMProtocol::accept): Don't call pimls->listen()
	in this method.
	(IIIMProtocol::set_server_listen_address): Made it
	take IMSocketAddressVec& and pass it to restart().

	* IMUtil.hh (class IMSocketAddress): New class.
	(IMSocket::LISTEN_MODE): Removed.
	(class IMSocket): Inhibit duplication.
	(IMSocket::IMSocket): Made it take a file descriptor.
	(IMSocketListen::sockvec): Renamed from endvec.
	(IMSocketListen::listen): Made it take
	IMSocketAddressVec&.
	(IMSocketListen::IMSocketListen): Made it take
	no argument.

	* IMUtil.cpp (IMSocket::get_addrinfo): Removed.
	Defined the equivalent functionality in
	IMSocketAddressVec::get_addrinfo.
	(IMSocketAddress::get_addrinfo): New function.
	(IMSocketAddress::bind_fail): New function.
	(IMSocketAddress::configure_socket): Ditto.
	(IMSocketAddress::setup_inet): Ditto.
	(IMSocketAddress::setup_unix): Ditto.
	(IMSocketAddress::create_sockets): Ditto.
	(IMSocketAddress::~IMSocketAddress): New destructor.
	(IMSocketAddress::IMSocketAddress): New constructor.
	(IMSocket::do_listen): Set status to OPEN if succeed.
	(IMSocket::IMSocket): Made it takes a file descriptor.
	(IMSocket::~IMSocket): Made it not do freeaddrinfo().
	(IMSocketListen::listen): Before actually listening sockets,
	initialize sockvec.
	(IMSocketListen::accept): Use sockvec instead of endvec.
	(IMSocketListen::~IMSocketListen): do delete_all to sockvec.

	* IMSvrArg.cpp (IMSvrArg::configure): Made it use
	IMSocketAddressVec to specify addresses.

	* IIIMProtocol.hh (IIIMProtocol::endvec): Removed.
	(IIIMProtocol::restart): Made it take IMSocketAddressVec&.
	(IIIMProtocol::set_server_listen_address): Ditto.

	* IMSvrCfgFile.cpp (IMSvrCfgFile::add_listen_address):
	Renamed from listenendvec to listenaddrvec.
	(IMSvrCfgFile::configure): Ditto.

	* IMSvr.hh (IMSvr::addrvec): new member.
	(IMSvr::config_listenaddress): Made it take
	IMSocketAddressVec&.

	* IMSvr.cpp (IMSvr::config_listenaddress): Made it take
	IMSocketAddressVec&.

2003-06-24  MIYASHITA Hisashi  <himi@li18nux.org>

	* IIIMP_IMState.cpp (create_input_method_descriptors):
	Adopted imname as an "idname", and an empty string
	as a reverse domain name for
	iiimp_inputmethod_descriptor_new().

2003-06-21  MIYASHITA Hisashi  <himi@li18nux.org>

	* IMBasicObject.hh (IMDescriptor::get_languages): New member
	function.

	* IIIMP_IMState.hh
	(IIIMP_IMState_Identified::create_language_list)
	(IIIMP_IMState_Identified::create_input_method_descriptors):
	New member functions.

	* IIIMP_IMState.cpp (IIIMP_IMState::create_language_list)
	(IIIMP_IMState::create_input_method_descriptors):
	New functions.
	(IIIMP_IMState::set_data_to_client): When the protocol version is
	not less than 3, send input method descriptors in IM_SETIMVALUES
	as well.

2003-06-21  MIYASHITA Hisashi  <himi@li18nux.org>

	* IIIMP_IMState.cpp (IIIMP_IMState::send_protocol_version):
	New function.
	(IIIMP_IMState::message_proc): Call send_protocol_version(),
	and pass proto_version to the constructor of
	IIIMP_IMState_Identified.
	(IIIMP_IMState::IIIMP_IMState): Added a new argument,
	"proto_version".  Just only pass it to IMState().
	(IIIMP_IMState_Identified::IIIMP_IMState_Identified):
	Likewise, but pass it to IIIMP_IMState().


	* IMState.hh (IMState::protocol_version): New member variable.
	(IMState::get_current_protocol_version): New member function.
	(IMState::check_protocol_version): Ditto.
	(IMState::IMState): Added a new argument, "x_protocol_version".

	* ICState.hh (ICState::check_protocol_version): New member
	function.

	* IIIMP_IMState.hh (IIIMP_IMState::send_protocol_version):
	New decl.
	(IIIMP_IMState::IIIMP_IMState): Added a new argument,
	"proto_version".
	(IIIMP_IMState_Identified::IIIMP_IMState_Identified): New
	constructor.

2003-06-17  MIYASHITA Hisashi  <himi@li18nux.org>

	* IMState.cpp (IMState::new_ic_id): Made ic_id start
	from 1, not 0.

	* LE.cpp (LEBase::loadif): When iml_if->ifpath_name,
	iml_if->if_version, or iml_if->locale is NULL, print
	"(NULL)" for each of them as a debugging message.

2003-06-12  MIYASHITA Hisashi  <himi@li18nux.org>

	* Makefile.am (htt_server_LDADD): Add $(SOCKET_LIBS).

	* IMSvrCfgFile.hh
	(IMSvrCfgFile::DirArgs, IMSvrCfgFile::DirHandler):
	Made them public.

	* IMLog.hh (IMLog::cleanup):
	Defined it as void.

	* iwrap.c: Included stdlib.h.
	(authenticate_with_pam): When assigning cv.appdata_ptr,
	cast password to (void*).

	* IMLog.cpp (IMLog::output): Define the second argument as
	"lvl" because "lv" hides the instance variable.
	(IMLog::output): When LOG_AUTHPRIV is not defined, use
	LOG_AUTH instead.

	* IMInputContext.cpp
	(IMInputContext::switch_lecontext): Return false.

	* IMScheduler_MTPC.cpp (IMScheduler_MTPC::construct):
	Return pimsch.

	* IMState.hh (IMState::ICStateMap): Made it public.
	(IMState::deliver): Return the value of message_proc.

	* ICState.hh (ICState::mark_terminal): return true.

	* IIIMProtocol.cpp
	(IIIMProtocol::set_server_listen_address):
	Return the value of restart().

	* basictype.hh (Functor_deleteobject::operator):
	Return true.
	(Functor_destroyobject::operator):
	Ditto.

	* IMSignal.hh: Define IMSignalHandlerMap as
	map<int, IMSignal_handler> because, in SunONE compiler,
	declarations of map::insert conflicts if the key type is
	constant.
	(IMSignal::cleanup): Defined it as void.

	* watchdog.c: Include stdlib.h.

	* IMBasicObject.cpp (get_object_from_fullid): Return the
	value of get_object_from_attribid().

	* LE.cpp (create_lecontext): Rename iml_if to iml_if_ctx
	because iml_if hides the instance variable of LEContext.
	(send_event): Return true.
	(reset): Return true.

2003-06-10  MIYASHITA Hisashi  <himi@li18nux.org>

	* Makefile.am (htt_server_LDADD): Link htt_server
	with libiml.la, not libiml.a.

2003-05-06  MIYASHITA Hisashi  <himi@li18nux.org>

	* IMSvrArg.cpp (configure): Permit "localhost.localdomain"
	by default as well as "localhost".

	* Makefile.am (htt_server_LDADD): Made it link with libiiimp.la.
	It would result in dynamically linking them.

2003-05-05  MIYASHITA Hisashi  <himi@li18nux.org>

	* IMAuth.cpp: include IMLog.hh.
	(fd_ok, auth_fd): Output messages on authentication.

2003-04-08  MIYASHITA Hisashi  <himi@li18nux.org>

	* watchdog.c (main): Refrain to print the argument list.

2003-03-27  MIYASHITA Hisashi  <himi@li18nux.org>

	* Makefile.am (bindir): Set it to $(IMBINDIR).

2003-03-26  MIYASHITA Hisashi  <himi@li18nux.org>

	* Makefile.am (htt_server_SOURCES): Add header files also.

	* watchdog.c (main): Pass -nodaemon option to htt_server.

	* IMSvrArg.cpp (IMSvrArg::initialize): Add "nodaemon" option.
	(IMSvrArg::configure): If NODAEMON option is true, don't
	daemonize the program.

	* IMSvrCfg.cpp (initialize): Initialize NODAEMON as
	a bool flag.
	* IMSvrCfg.hh (IMSvrCfg::IMSvrCfgOpt): Add "NODAEMON"
	option.

2003-03-25  MIYASHITA Hisashi  <himi@li18nux.org>

	* IMSvrCfgFile.cpp (IMSvrCfgFile::initialize):
	Add "ListenAddress" directive.
	(IMSvrCfgFile::add_listen_address): New function.
	(IMSvrCfgFile::configure): When listenendvec is
	configured by add_listen_address, call
	config_listenaddress, and invalidate
	IMSvrCfg::HOSTNAME.

	* IMSvrCfgFile.hh (class IMSvrCfgFile): Introduce
	listenendvec.
	(IMSvrCfgFile::add_listen_address): New function.

	* IMSvrArg.cpp (IMSvrArg::set_argopt): New function.
	(IMSvrArg::configure): Call set_argopt() before and after
	calling configure() of IMSvrCfgFile.  And if IMSvrCfg::HOSTNAME
	has a valid value, call config_listenaddress() here.
	(IMSvrArg::parse_arguments): When the same options are specified
	more than once, raise an error.
	(IMSvrArg::addopt): Use insert method of optmap because operator[]
	requires the default constructor of ArgVal.

	* IMSvrArg.hh (class IMSvrArg): Introduce "ArgVal", and the second
	value of IMSvrArgMap is ArgVal.
	(IMSvrArg::set_argopt): New function.

	* IMSvrCfg.cpp (IMSvrCfg::initialize): Now PORT is configured as
	a string.
	(initbool): Use popts instead of opts.
	(initnum, initstr, setbool, setnum, setstr, get_boolval) 
	(get_numval, get_strval, showall): Ditto.
	(IMSvrCfg::IMSvrCfg): In order to share popts among duplicated objects,
	if the copy constructor is called, set &base to pbase; otherwise,
	set NULL to it.
	(IMSvrCfg::~IMSvrCfg): delete popts if pbase is not NULL.

	* IMSvrCfg.hh: include IMUtil.hh.
	(class IMSvrCfg): Add a new member, pbase.
	(IMSvrCfg::popts): It replaces "opts".
	(IMSvrCfg::get_type, IMSvrCfg::get_description):
	Use popts instead of opts.
	(IMSvrCfg::config_listenaddress): Now it accepts IMSocketVec&
	instead of address and port.
	(IMSvrCfg::IMSvrCfg): Implement its own copy constructor.
	(IMSvrCfg::~IMSvrCfg): Implement a virtual destructor.

	* IMSvr.cpp (IMSvr::config_listenaddress):
	Now it accepts IMSocketVec&.
	(IMSvr::terminate): Call stop() of IMSchduler().

	* IMSvr.hh: include IMUtil.hh.
	(IMSvr::config_listenaddress): Now it accepts IMSocketVec&.
	(IMSvr::terminate): Not define it here.

	* IMScheduler_MTPC.cpp (IMScheduler_MTPC::stop): Currently,
	only return 1.
	(IMScheduler_MTPC::start): Make it return 1 (but usually
	it never returns).

	* IMScheduler_MTPC.hh (class IMScheduler_MTPC):
	Implement stop().

	* IMScheduler.hh (class IMScheduler): Add a new
	pure virtual method, stop().

	* IIIMProtocol.cpp (IIIMProtocol::restart): Create
	IMSocketListen instead of IIMTransListen.
	(IIIMProtocol::accept): Rename "pimtl" to "pimsl".
	And create IIIMPTrans from IMSocketTrans issued
	by "pimsl".
	(IIIMProtocol:set_server_listen_address):
	Now it receives IMSocketVec&.

	* IIIMProtocol.hh (class IIIMProtocol):
	To remember the end point, use IMSocketVec instead of
	"port" and "addr" members.  And use IMSocketListen instead
	of IIIMPTransListen.
	(IIIMProtocol::set_server_listen_address):
	Now it receives IMSocketVec&.

	* IIIMPTrans.cpp (IIIMPTrans::IIIMPTrans): Now it use IMSocketTrans*.
	(IIIMPTrans::~IIIMPTrans): Simply delete pimst.
	(IIIMPTrans_read): Use recv method of IMSocketTrans.
	(IIIMPTrans_write): Use send method of IMSocketTrans.
	(IIIMPTransListen): Removed.

	* IIIMPTrans.hh: Include IMUtil.hh.
	(class IIIMPTrans): Introduce "pimst" instead of "fd".
	And it is instanciated from IMSocketTrans*, not a file
	descriptor.
	(class IIIMPTransListen): Removed.  Use IMSocketListen
	instead.

	* IMUtil.cpp (do_listen, bind_fail, configure_socket) 
	(listen_inet, listen_unix_domain, listen, accept, get_fd) 
	(get_addrinfo, IMSocket::IMSocket, IMSocket::~IMSocket):
	New IMSocket method definitions.
	(send, recv, IMSocketTrans::IMSocketTrans)
	(IMSocketTrans::~IMSocketTrans): New IMSocketTrans method
	definitions.
	(listen, accept, IMSocketListen::IMSocketListen)
	(IMSocketListen::~IMSocketListen): New IMSocketListen method
	definitions.

	* IMUtil.hh: Include sys/types.h for size_t.
	(class IMSocket): New class.
	(class IMSocketTrans): Ditto.
	(class IMSocketListen): Ditto.

2003-03-23  MIYASHITA Hisashi  <himi@li18nux.org>

	* ICState.cpp (IMLExec_ICState::execute): Do
	iml_delete_inst() after executing it.

	* IIIMPTrans.cpp (IIIMPTrans::~IIIMPTrans): Delete pstream
	and pimplibstate.

2003-02-06  MIYASHITA Hisashi  <himi@li18nux.org>

	* ICState.cpp (ICState::deliver): When terminating IC, we don't destroy
	ICState if the current state has pproc_state because it means the
	current state may be waiting for the client response.

2003-01-06  MIYASHITA Hisashi  <himi@li18nux.org>

	* Makefile.am (htt_server_LDADD): Add $(IM_LIBDIR)/iiimp/libiiimp.la
	instead of ../lib/iiimp/libiiimp.a

2003-01-05  MIYASHITA Hisashi  <himi@li18nux.org>

	* IMUserMgr.cpp: When HAVE_CRYPT_H is defined, include crypt.h
	instead of unistd.h.

2002-12-26  MIYASHITA Hisashi  <himi@li18nux.org>

	* IMSvrCfg.cpp (IMSvrCfg::get_strval): Bug fix.
	opts[opt].type must be ARG_STRING.

2002-12-25  MIYASHITA Hisashi  <himi@li18nux.org>

	* LEMgr.cpp (listup_LEs): Fix the error message.

2002-12-21  MIYASHITA Hisashi  <himi@li18nux.org>

	* Makefile.am (htt_SOURCES): New variable for htt.
	(bin_PROGRAMS): Add "htt".

	* SharedData.h: Restored from "old" for htt.
	* watchdog.c: Ditto.

2002-11-11  MIYASHITA Hisashi  <himi@li18nux.org>

	* IMState.cpp (new_ic_id): Bug fix.  When it failed to
	allocate new ic-id at the first loop(tid is equal to
	size), this function immediately failed.  Increment tid
	if tid is not already allocated.

2002-11-03  MIYASHITA Hisashi  <himi@li18nux.org>

	* Makefile.in: Updated.

2002-10-28  MIYASHITA Hisashi  <himi@li18nux.org>

	* Makefile.in: Updated.

	* IMSignal.cpp: Include signal.h if HAVE_SIGNAL is defined.
	And include IMSvr.hh.
	(IMSignal::ignore): New function.
	(IMSignal::add): Call ::signal if HAVE_SIGNAL is defined.
	(IMSignal::IMSignal): Ignore SIGPIPE.

	* IMSignal.hh: Don't include IMSvr.hh.  Declare
	class IMSvr instead.  Include basictype.hh.  Don't include
	signal.h.
	(class IMSignal): Canonicalize style.
	(IMSignal::ignore): New member.

	* IMSvr.hh: Include basictype.hh explicitly.

2002-10-11  MIYASHITA Hisashi  <himi@li18nux.org>

	* LE.cpp (LEBase::loadif): If sunim_default is true, filename is
	used as try_lename.  And init. lename and lename_hrn with the
	predefined values.

	* LEMgr.cpp (LEMgr::listup_LEs): When fail to initialize
	psunim_default_lebase, stop the server.

2002-10-04  MIYASHITA Hisashi  <himi@li18nux.org>

	* Makefile.in: Updated.

	* Makefile.am (htt_server_LDADD): Add $(LIBCRYPT_FLAGS)
	and $(LIBWRAP_FLAGS).

	* LE.cpp (LEBase::add_imobjectdesc): When pol is NULL,
	we regard it as an empty object descriptors, thus return
	immediately.

	* IMUserMgr.cpp: Include unistd.h instead of non-standard header
	file crypt.h

2002-09-27  MIYASHITA Hisashi  <himi@li18nux.org>

	* LE.cpp (LEBase::loadif): When iml_if->lename is NULL,
	immediately return false.

	* IMInputContext.cpp (IMInputContext::destroy): Return true.

	* IIIMP_ICState.cpp (IIIMP_ICState::destroy): New overriding function.
	(IIIMP_ICState_REQUESTED::destroyic): When successfully destroying
	ichandler, call	invalidate_ichandler().
	(IIIMP_ICState_REQUESTED::toggle_client_convmode): output debug message.

	* IIIMP_ICState.hh (class IIIMP_ICState): Add void destroy().

	* ICState.hh (class ICState): Add invalidate_ichandler().

	* ICHandler.hh (class ICHandler): Add void destroy().

2002-09-25  MIYASHITA Hisashi  <himi@m17n.org>

	* IIIMP_IMState.cpp (send_trigger_keys):
	Correct the value of ctrl_space.

2002-09-17  MIYASHITA Hisashi  <himi@m17n.org>

	* LE.cpp (initialize): Before calling set_values, bind_imlexec() to
	NULL.

2002-09-09  MIYASHITA Hisashi  <himi@m17n.org>

	* basictype.hh: In this header file, at least, you have to
	put std:: prefix to refer any symbols in std namespace.
	(UTFCHAR_char_traits): Now we independently prepare char_traits
	for u16string, and add `set' method for string_char_traits(note
	that it is not a C++ standard class!).
	(class u16string): explicitly specify UTFCHAR_char_traits as
	char_traits.

2002-09-08  MIYASHITA Hisashi  <himi@m17n.org>

	* LE.hh (class IMDesktop): Declared.
	(LEBase::open_iml_desktop, LEBase::close_iml_desktop): New
	member functions.
	(LEContext::set_IMArg): Removed.
	(LEContext::get_lebase): New member function.

	* LE.cpp (LEBase::open_iml_desktop): New function.
	(LEBase::close_iml_desktop): Likewise.
	(LEBase::LEBase): When the passed option is invalid, raise
	ERROR_INTERNAL().  And don't forget to call loadif().
	(LEContext::set_IMArg): Removed.  This role is moved to IMDesktop.
	(LEContext::initialize): Call get_iml_desktop_args to obtain desktop
	IMArgs.  And call request_iml_desktop to obtain iml_desktop.
	And lock leif_sync_object only when calling iml_construct_session().
	(LEContext::LEContext): When initialize() fails, set error to true.
	(LEContext::~LEContext): Call if_DestroySC_WithoutDesktopDestruction()
	instead of if_DestroySC, and call release_iml_desktop().

	* IMUser.cpp: Include IMLog.hh.
	(IMUser::request_desktop): Remove one that has no argument.
	And it emit debug log message when successfully find an appropriate
	existing desktop.
	(IMUser::IMUser): Remove the part on pdefault_desktop.

	* IMUser.hh (IMUser::pdefault_desktop): Removed.
	(IMUser::request_desktop): Now it must take IMDesktop::IMDesktopAttr.

	* IMDesktop.cpp: Include IMLog.hh.
	(IMDesktop::initialize): Properly initialize desktop_display_name.
	(IMDesktop::request_iml_desktop): Keep associations between
	LEBase and iml_desktop in iml_desktop_map.
	(IMDesktop::release_iml_desktop): When iml_desktop has no session,
	delete it.
	(IMDesktop::get_iml_desktop_args): Now IMDesktop takes charge of what
	LEContext::set_IMArg did.
	(IMDesktop::~IMDesktop): Close and delete all iml_desktops that
	`this' has.

	* IMDesktop.hh (class LEBase): declared.
	(IMDesktop::IMDESKTOP_ATTRS): Add a new item, CLIENT_HOST.
	(IMDesktop::iml_desktop): New member.
	(IMDesktop::desktop_display_name): New member.
	(IMDesktop::IMLDesktopMap): New typedef.
	(IMDesktop::iml_desktop_map): New member.
	(IMDesktop::create_iml_desktop): Make it a private member.
	(IMDesktop::request_iml_desktop): New member function.
	(IMDesktop::get_desktop_display_name): New member function.
	(IMDesktop::get_iml_desktop_args): New member function.
	(IMDesktop::get_lecontext_args): Now it does not take lec as an
	argument.

	* IMConnection.cpp (IMConnection::get_desktop): Set
	IMDesktop::CLIENT_HOST of IMDesktopAttr when calling
	request_desktop().
	(IMConnection::set_client_info): Likewise.

	* LE.cpp (LEBase::loadif): Now IMLock takes IMSyncObject&.
	(LEBase::openif): Likewise.
	(LEBase::closeif): Likewise.
	(LEContext::set_values): Likewise.
	(LEContext::realize): Likewise.
	(LEContext::send_event): Likewise.
	(LEContext::reset): Likewise.
	(LEContext::toggle_focus): Likewise.
	(LEContext::initialize): Likewise.
	(LEContext::~LEContext): Likewise.

	* LE.hh (LEBase::leif_sync): Now it is a IMSyncObject.
	(LEBase::get_leif_sync_object): Return IMSyncObject&.
	(LEContext::get_leif_sync_object): Likewise.

	* basictype.hh (u16string::u16string): New constructor.  Now
	it can take const string&.

	* IMLock.hh (class IMSyncObject): New class.
	(class IMLock): Now IMLock takes IMSyncObject instead of bare
	THREAD_SYNC_OBJECT.
	(IMLock::lock, IMLock::unlock): Removed.  IMSyncObject has these
	lock/unlock interfaces.

	* IMBasicObject.cpp (IMObjectMgr::IMObjectMgr): Don't init.
	sync_object because IMSyncObject automatically init. by itself.
	(IMObjectMgr::add): IMLock takes IMObjectMgr&.
	(IMObjectMgr::get_object_from_attribid): Likewise.

	* IMBasicObject.hh: Include IMLock.hh instead of threaddef.h.
	(class IMObjectMgr): Use IMSyncObject instead of bare
	THREAD_SYNC_OBJECT.

	* ICState.hh (class IMLExec_ICState): Use IMSyncObject instead of
	bare THREAD_SYNC_OBJECT.

2002-09-07  MIYASHITA Hisashi  <himi@m17n.org>

	* IIIMP_ICState.cpp (IIIMP_ICState_REQUESTED::aux_setvalues):
	Correct the type of pauxval.
	(IIIMP_ICState_REQUESTED::aux_setvalues): When constructing
	preply, we have to construct input method name also, because
	it will be deleted with preply.

	* LE.cpp (LEContext::send_event): Modify the style.

2002-09-06  MIYASHITA Hisashi  <himi@m17n.org>

	* IMLock.hh (IMLock::locked): New member.
	(IMLock::IMLock): properly initialize locked.
	(IMLock::~IMLock): Unlock only if locked is true.

	* LE.cpp (LEContext::toggle_focus): Call bind_imlexec() at the head
	because realize() may require imlexec.

2002-09-05  MIYASHITA Hisashi  <himi@m17n.org>

	* IIIMP_ICState.cpp(IIIMP_ICState_REQUESTED::forward_keyevent):
	Bug fix.  Correct the expression of `pcon'.
	(IIIMP_ICState_REQUESTED::finish): Remove the inappropriate comment.

	* IMSvrArg.cpp (IMSvrArg::initialize): Comment out the part on SYSLOG.
	(IMSvrArg::configure): Set up IMLog by the values of LOG_FACILITY and
	LOG_LEVEL.

	* IMSvrCfg.cpp (IMSvrCfg::initialize): Init. LOG_FACILITY and LOG_LEVEL.
	Remove the part on SYSLOG.

	* IMSvrCfg.hh (IMSvrCfg::IMSvrCfgOpt): Add LOG_FACILITY and LOG_LEVEL.
	And remove SYSLOG.

	* IMLog.cpp (IMLog::IMLog): Exclude directory part from the progname.

	* IMLog.hh (IMLog::LOG_LEVEL): new enum. item, INVALID.

2002-09-02  MIYASHITA Hisashi  <himi@m17n.org>

	* IIIMP_IMState.cpp (message_proc<IM_SETVALUES_REPLY>): Ignore it.

	* IMState.cpp (cleanup_ic): Bug fix.  Advance only the iterator it.
	Don't advance it2.

	* IIIMPUtil.hh (CONV_IIIMP_STR): Check if the length of IIIMP_string
	is grater than 0.

2002-08-31  MIYASHITA Hisashi  <himi@m17n.org>

	* .cvsignore: New file.

	* IMScheduler_MTPC.cpp (IMScheduler_MTPC_thread_entry): 
	Renamed from IMScheduler_thread_entry.

	* IIIMProtocol.cpp (IIIMProtocol::restart): New member function.
	(IIIMProtocol::accept): When pimtl->listen() fails, restart it,
	then retry listen().
	(IIIMProtocol::set_server_listen_address): Use restart() to reinit
	pimtl.

	* IIIMProtocol.hh (IIIMProtocol::restart): New member function.

	* IIIMPTrans.hh (IIIMPTransListen::errorp): New member function.

	* IIIMPTrans.cpp: When status is not `CLOSED', close listen_socket.
	(accept): Properly set fromlen.

