VMime Book 日本語訳 第6章 6-8

VMime Book 日本語訳 第6章 6-8
2020-07-01 K.OHWADA

原文
VMime Book: A Developer’s Guide To VMime
https://www.vmime.org/public/documentation/book/vmime-book.pdf

全体目次

第6章 メッセージングサービスの操作

Working with Messaging Services

6.8 トレース接続

Tracing connection

接続トレースは、クライアントとサーバー間のネットワーク上で送受信されたものをログに記録するために使用され、デバッグに役立つ場合があります。 まず、独自のトレーサーを作成する必要があります。 これには、vmime :: net :: tracerインターフェースを実装する必要があります。

これは、単に標準出力にログを記録するトレーサーの例です。

リスト6.18:単純なトレーサー
A simple tracer

class myTracer : public vmime::net::tracer {
public :
myTracer(const vmime::string& proto, const int connectionId) : m proto(proto), m connectionId(connectionId)
{ }
// Called by VMime to trace what is sent on the socket
void traceSend(const vmime:: string& line) {
std::cout << ”[” << m proto << ”:” << m connectionId <<”]C: ”<<line<<std::endl;
}
// Called by VMime to trace what is received from the socket
void traceReceive(const vmime:: string& line) {
s t d : : c o u t << ” [ ” < < m p r o t o << ” : ” << m c o n n e c t i o n I d
}
private :
<< ” ] S : ” << l i n e << s t d : : e n d l ;
const vmime::string m proto;
const int m connectionId; };

また、トレーサーオブジェクトをインスタンス化するために使用されるファクトリクラスを作成します。

class myTracerFactory : public vmime::net::tracerFactory {
public :
vmime::shared ptr <vmime::net::tracer> create (vmime: : shared ptr <vmime: : net : : service> serv ,
const int connectionId) {
return vmime::make shared <myTracer> (serv−>getProtocolName(), connectionId);
} };

次に、VMimeにそれを使用するように指示する必要があります。サービス(ストアまたはトランスポート)を作成するときは、サービスでsetTracerFactoryを呼び出し、ファクトリクラスのインスタンスを渡すだけです。

リスト6.19:接続でトレーサーを有効にする
Enabling tracer on a connection

vmime: : shared ptr <vmime: : net : : transport> store = session−>getStore(”imaps://user:password@imap.myserver.com”);
// Enable tracing communication between client and server
store−>setTracerFactory(vmime: : make shared <myTracerFactory>());

それで全部です! これで、ソケットで送受信されるすべてのものが、トレーサーオブジェクトを使用してログに記録されます。

IMAPのトレースセッションの例を次に示します。

[imaps:1] S: * OK [CAPABILITY IMAP4rev1 LITERAL+
SASL-IR LOGIN-REFERRALS ID ENABLE IDLE
AUTH=PLAIN] Dovecot ready.
[imaps:1] C: a001 AUTHENTICATE PLAIN
[imaps:1] S: +
[imaps:1] C: {...SASL exchange: 52 bytes of data...}
[imaps:1] S: a001 OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR
LOGIN-REFERRALS ID ENABLE IDLE SORT SPECIAL-USE QUOTA] Logged in
[imaps:1] C: a002 LIST "" ""
[imaps:1] S: * LIST (\Noselect) "." ""
[imaps:1] S: a002 OK List completed.
[imaps:1] C: a003 CAPABILITY
[imaps:1] S: * CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SPECIAL-USE QUOTA
[imaps:1] S: a003 OK Capability completed.
[imaps:1] C: a003 SELECT INBOX (CONDSTORE)
[imaps:1] S: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft $NotJunk NonJunk JunkRecorded $MDNSent NotJunk $Forwarded Junk $Junk Forwarded $MailFlagBit1) [imaps:1] S: * OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft $NotJunk NonJunk JunkRecorded $MDNSent NotJunk $Forwarded Junk $Junk Forwarded $MailFlagBit1 *)] Flags permitted. [imaps:1] S: * 104 EXISTS
[imaps:1] S: * 0 RECENT
[imaps:1] S: * OK [UNSEEN 6] First unseen.
[imaps:1] S: * OK [UIDVALIDITY 1268127585] UIDs valid
[imaps:1] S: * OK [UIDNEXT 32716] Predicted next UID
[imaps:1] S: * OK [HIGHESTMODSEQ 148020] Highest
[imaps:1] S: a003 OK [READ-WRITE] Select completed.

機密データ(ログインやパスワードなど)は追跡されないことに注意してください。
同様に、メッセージコンテンツやSASL交換などのblobデータは、送受信されたバイト数を示すマーカーとしてログに記録されます
(例: ”...SASL exchange: 52 bytes of data...””)