2016-04-07 20 views
0

下面是我用來解密之前加密的一些XML的代碼片段。如果它沒有加密(純文本),那麼我不需要解密並處理它,我想將它原樣返回。Erlang大小寫表達式不返回值

它根本沒有返回任何東西。請幫助我使它工作。

更新的代碼:

pop_offline_messages(Ls, LUser, LServer, odbc) -> 
    EUser = ejabberd_odbc:escape(LUser), 
    case odbc_queries:get_and_del_spool_msg_t(LServer, 
          EUser) 
    of 
     {atomic, {selected, [<<"username">>, <<"xml">>], Rs}} -> 
     Ls ++ 
     lists:flatmap(fun ([_, XML]) -> 
     ?INFO_MSG("decrypted message from mod_offline ~p ",[XML]), 

     Top = case str:str(XML, <<"message">>) of 
     Top >= 1 -> XML; 
     Top == 0 -> crypto:aes_cfb_128_decrypt(<<"abcdefghabcdefgh">>,<<"12345678abcdefgh">>,base64:decode(XML)) 
    end, 
      case xml_stream:parse_element(XML) of 
        {error, _Reason} -> 
              []; 
        El -> 
              case offline_msg_to_route(LServer, El) of 
               error -> 
                []; 
               RouteMsg -> 
                [RouteMsg] 
              end 
        end 
       end, 
       Rs); 
     _ -> Ls 
    end; 
+0

你能給出一個應該解密的輸入數據的例子嗎? – legoscia

+0

在'crypto'文檔中我沒有看到'crypto:aes_cfb_128_decrypt/3'函數? http://erlang.org/doc/man/crypto_app.html – Amiramix

+1

'str:str/2'是做什麼用的?什麼價值被返回? **總是**返回。 – rvirding

回答

1

如果它是「不返回任何東西」,這可能是因爲你不執行它,或者你不存儲結果。我建議你改變你的代碼:因爲有了這個當前片段版本

Result = case str:str(XML, <<"message">>) of 
     1 -> XML; 
     _ -> crypto:aes_cfb_128_decrypt(<<"abcdefghabcdefgh">>,<<"12345678abcdefgh">>,base64:decode(XML)) 
    end, 
io:format("~p~n",[result]), 
... 

,案件的結果沒有使用,所以一旦評估丟失。

+0

我嘗試了你上面建議的存儲結果,但現在我得到了以下錯誤錯誤 – Nitin

+0

**錯誤**:{badmatch,<<「 \ n \ n \ n <延遲xmlns ='urn:xmpp:延遲'from ='n.ngageapp.com'stamp ='2016-04-11T13:12:12.445Z'>離線存儲「>>},[{mod_offline,' - pop_offline_messages/4-fun-5 - ',2,[{file,」src/mod_offline.erl「},{line,464}]},{lists,flatmap, 2,[{file,「lists.erl」},{line,1248}]},{mod_offline,pop_offline_messages,4,[{file,「src/mod_offline.erl」},{line,461}]} – Nitin

+0

困難說多了,你有一個mod_offline模塊,並且第464行的返回值與你使用的模式不匹配(返回的值是二進制字符串) – Pascal