WindowsでC++を使った開発をする時に、現在もメンテナンスされていてかつ実用的に動くXMPPクライアントライブラリを見つけられなかったので、仕方無しに作ってみようかと思います。いつまで続くのかは分かりませんが。
まずはStream, Stanzaクラス。この辺りは無難。Stanzaクラスの子クラスにはMessage, Presence, IQクラス。この辺りは誰が作っても変わらないはず。
ユーザーに直接見せるクラスはXmppClientクラス。受信したStanzaを受け取るコールバックメソッドがあったり、またRosterの管理をしたり。巨大なクラスになりそうなので、あまりに巨大になりそうだったら直接Stanzaを扱う低レベルな部分と、高レベルな部分でクラスを分割するような形になるのかも。
小道具として必要な物がいくつかあります。SAXパーサライクなXMLライブラリは自作予定。Winsockは2を利用。Validity Constraintsにまで準拠するような厳密な解釈をしようとしなければ、おそらく自作してしまった方が早いかと。TLSはOpenSSLを使った方がいいのか、WindowsのSSL API(という物があるらしい)を使った方がいいのか、よく分かっていない。SASLはCyrus SASLを使う。Stringprepはどうしようか未定ですが、RFCを解析してプログラム中に表を持つようにするのかも。
まずはRFCの範囲の実装を頑張ります。XEPの範囲は追々。