⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 megaco_flex_scanner.erl

📁 OTP是开放电信平台的简称
💻 ERL
字号:
%% ``The contents of this file are subject to the Erlang Public License,%% Version 1.1, (the "License"); you may not use this file except in%% compliance with the License. You should have received a copy of the%% Erlang Public License along with this software. If not, it can be%% retrieved via the world wide web at http://www.erlang.org/.%% %% Software distributed under the License is distributed on an "AS IS"%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See%% the License for the specific language governing rights and limitations%% under the License.%% %% The Initial Developer of the Original Code is Ericsson Utvecklings AB.%% Portions created by Ericsson are Copyright 1999, Ericsson Utvecklings%% AB. All Rights Reserved.''%% %%     $Id$%%----------------------------------------------------------------------%% Purpose : Scanner for text encoded Megaco/H.248 messages%%-----------------------------------------------------------------------module(megaco_flex_scanner).-export([start/0, stop/1, scan/2]).start() ->    (catch do_start()).do_start() ->    Path = lib_dir(),    erl_ddll:start(),     load_driver(Path),    Port = open_drv_port(),    {ok, Port}.lib_dir() ->    case code:priv_dir(megaco) of	{error, Reason} ->	    throw({error, {priv_dir, Reason}});	P when list(P) ->	    P ++ "/lib"    end.    load_driver(Path) ->    case erl_ddll:load_driver(Path, drv_name()) of	ok ->	    ok;	 {error, Reason} ->	    throw({error, {load_driver, Reason}})    end.open_drv_port() ->    case (catch erlang:open_port({spawn, drv_name()}, [binary])) of	Port when port(Port) ->	    Port;	{'EXIT', Reason} ->	    erl_ddll:unload_driver(drv_name()),	    throw({error, {open_port, Reason}})    end.drv_name() ->    case erlang:system_info(threads) of	true ->	    "megaco_flex_scanner_drv_mt";	false ->	    "megaco_flex_scanner_drv"    end.stop(Port) ->    erlang:port_close(Port),     erl_ddll:unload_driver(drv_name()),    stopped.scan(Binary, Port) ->    case erlang:port_control(Port, $s, Binary) of	[] ->	    receive		{tokens, Tokens, LatestLine} ->		    Vsn = version(Tokens),		    {ok, Tokens, Vsn, LatestLine} 	    after 0 ->		    {error, "Driver term send failure", 1}	    end;	Reason ->	    {error, Reason, 1}    end.version([]) ->    99; % Let the parser deal with thisversion([{'SafeChars',_,"!/1"}|_]) ->    1;version([{'SafeChars',_,"megaco/1"}|_]) ->    1;version([{'SafeChars',_,"!/2"}|_]) ->    2;version([{'SafeChars',_,"megaco/2"}|_]) ->    2;version([{'SafeChars',_,"!/3"}|_]) ->    3;version([{'SafeChars',_,"megaco/3"}|_]) ->    3;version([{'SafeChars',_,[$!, $/ | Vstr]}|_]) ->    guess_version(Vstr);version([{'SafeChars',_,[$m, $e, $g, $a, $c, $o, $/ | Vstr]}|_]) ->    guess_version(Vstr);version([_|T]) ->    version(T).guess_version([C]) when (48 =< C) and (C =< 57) ->    C-48;guess_version(Str) when is_list(Str) ->    case (catch list_to_integer(Str)) of	I when is_integer(I) ->	    I;	_ ->	    99 % Let the parser deal with this    end;guess_version(_) ->    99. % Let the parser deal with this

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -