Category: "Erlang"

2007/06/04

  00:22:34 by , Categories: Freesoftware and Open Source Software, モブログ, Erlang

Link: http://www.dtek.chalmers.se/~henoch/text/ejabberd-ircd.html

ejabberd_ircdというモジュールがあるが、最新のejabberd 1.1.3に対応していない。
ということで、修正した。

まだまともに動き出していないが、どちらかというと、もともとのこのモジュールのバグのような気がしてならない。

オリジナルのモジュールはここから取得する。
IRC-to-XMPP interface


Index: src/ejabberd_ircd.erl
===================================================================
--- src/ejabberd_ircd.erl (revision 107)
+++ src/ejabberd_ircd.erl (working copy)
@@ -7,6 +7,7 @@
%% External exports
-export([start/2,
start_link/2,
+ become_controller/1,
socket_type/0]).

%% gen_fsm callbacks
@@ -20,7 +21,7 @@
terminate/3
]).

-%-define(ejabberd_debug, true).
+-define(ejabberd_debug, true).

-include("ejabberd.hrl").
-include("jlib.hrl").
@@ -51,7 +52,7 @@

-record(line, {prefix, command, params}).

-%-define(DBGFSM, true).
+-define(DBGFSM, true).

-ifdef(DBGFSM).
-define(FSMOPTS, [{debug, [trace]}]).
@@ -71,6 +72,9 @@
socket_type() ->
raw.

+become_controller(Pid) ->
+ gen_fsm:send_all_state_event(Pid, become_controller).
+
%%%----------------------------------------------------------------------
%%% Callback functions from gen_fsm
%%%----------------------------------------------------------------------
@@ -119,7 +123,7 @@
?DICT:store(RoomJID, BareChannel, JToC)}
end, {?DICT:new(), ?DICT:new()},
ChannelMappings),
- inet:setopts(Socket, [list, {packet, line}, {active, true}]),
+ %%inet:setopts(Socket, [list, {packet, line}, {active, true}]),
%%_ReceiverPid = start_ircd_receiver(Socket, SockMod),
{ok, wait_for_nick, #state{socket = Socket,
sockmod = SockMod,
@@ -149,6 +153,9 @@
Reply = ok,
{reply, Reply, StateName, StateData}.

+handle_event(become_controller, StateName, StateData) ->
+ activate_socket(StateData),
+ {next_state, StateName, StateData};
handle_event(_Event, StateName, StateData) ->
{next_state, StateName, StateData}.

@@ -836,3 +843,11 @@
end;
error_to_string(_) ->
"unknown error".
+
+activate_socket(#state{socket = Socket, sockmod = SockMod}) ->
+ case SockMod of
+ gen_tcp ->
+ inet:setopts(Socket, [list, {packet, line}, {active, true}]);
+ _ ->
+ SockMod:setopts(Socket, [list, {packet, line}, {active, once}])
+ end.

このソフトはerlangという関数型言語で記述されている。

2007/05/18

  18:50:00 by , Categories: Freesoftware and Open Source Software, Programming, Erlang

Link: http://www.process-one.net/en/blogs/article/angie_ejabberd_roadmap_updated/

高いスケーラブルのInstant Messaging のソフトウエアejabberdのロードマップが更新された。ejabberdは、関数型、並列のErlang言語を用いて実装されている。

  • ejabberd 2.0: このバージョンで新しいアーキテクチャである Flexarchが採用される。基本のアイディアはもっとも柔軟で設定可能なアーキテクチャで、痛みを伴わずすべての組織で適用することができるいようにするものになる。このリリースはベータステータスに2007年5月に、リリースは7月になる予定だ。
  • ejabberd 2.1: This version is expected to change the relational database architecture support to make it more flexible and ease code maintenance.
  • ejabberd 2.2: This version will be a major optimisation of the code base and will dramatically improve the performance and the memory consumption. It will integrate a new XMPP parsing library called exmpp, common to ejabberd and Jabberlang. More on this new library soon, which is the key of this performance boost.
  • ejabberd 2.3: This version will improve the consistency of the cluster configuration mechanisms. A single configuration file describing the complete cluster will be introduced, radically improving cluster management.

とのことで、楽しみである。

Atlassian Jira によるプロジェクトトラッキングソフトウエアのロードマップによると、ロードマップの進捗状況まだまだOPENになっているIssueが多数あるようだ。