LoginSignup
0
0

More than 5 years have passed since last update.

cocos2dx2.xで作ったIOSアプリのIPv6対応

Last updated at Posted at 2016-08-04

背景

6月1日からiosのアプリはIPv6対応必須になっていたらしく
先日、Appleにアプリを申請したらリジェクトされたので対応した

[参考]
http://www.bengigi.com/cocos2d-x-2-x-android-libpng-vulnerability-fix/
https://github.com/cocos2d/cocos2d-x/pull/15666

参考サイトはcocosv3系だったので2系でやったことをメモとして残しておく

やったこと

まず、ここから必要なライブラリをzipでダウンロードしてくる
https://github.com/cocos2d/cocos2d-x-3rd-party-libs-bin/releases/tag/v2-deps-6

差し替えるのは以下
cocos2dx/platform/third_party/ios/curl/*.h
cocos2dx/platform/third_party/ios/libraries/libwebp.a//差し替え
cocos2dx/platform/third_party/ios/libraries/libcurl.a//差し替え
cocos2dx/platform/third_party/ios/libraries/libcrypto.a//追加
cocos2dx/platform/third_party/ios/libraries/libssl.a//追加
external/libwebsockets/ios/include/libwebsockets.h
external/libwebsockets/ios/include/lws_config.h
external/libwebsockets/ios/lib/libwebsockets.a

以下はzipの中には含まれていないので、ファイルの中を書き換える
extensions/network/WebSocket.h
extensions/network/WebSocket.cpp

-のところを+のコードに書き換える
見にくくて申し訳ないorz

WebSocket.h
-    int onSocketCallback(struct libwebsocket_context *ctx,
-                         struct libwebsocket *wsi,
-                         enum libwebsocket_callback_reasons reason,
+    int onSocketCallback(struct lws *wsi,
+                         enum lws_callback_reasons reason,

-    struct libwebsocket*         _wsInstance;
-    struct libwebsocket_context* _wsContext;
+    struct lws*         _wsInstance;
+    struct lws_context* _wsContext;

-    struct libwebsocket_protocols* _wsProtocols;
+    struct lws_protocols* _wsProtocols;
WebSocket.cpp
-    static int onSocketCallback(struct libwebsocket_context *ctx,
-                                struct libwebsocket *wsi,
-                                enum libwebsocket_callback_reasons reason,
+    static int onSocketCallback(struct lws *wsi,
+                                enum lws_callback_reasons reason,

-        WebSocket* wsInstance = (WebSocket*)libwebsocket_context_user(ctx);
+        lws_context* context = lws_get_context(wsi);
+        WebSocket* wsInstance = (WebSocket*)lws_context_user(context);

-            return wsInstance->onSocketCallback(ctx, wsi, reason, user, in, len);
+            return wsInstance->onSocketCallback(wsi, reason, user, in, len);

-   _wsProtocols = new libwebsocket_protocols[protocolCount+1];
-   memset(_wsProtocols, 0, sizeof(libwebsocket_protocols)*(protocolCount+1));
+   _wsProtocols = new lws_protocols[protocolCount+1];
+   memset(_wsProtocols, 0, sizeof(lws_protocols)*(protocolCount+1));

-        libwebsocket_context_destroy(_wsContext);
+        lws_context_destroy(_wsContext);

-        libwebsocket_service(_wsContext, 0);
+        lws_service(_wsContext, 0);

-   info.extensions = libwebsocket_get_internal_extensions();
+   info.extensions = lws_get_internal_extensions();

-   _wsContext = libwebsocket_create_context(&info);
+   _wsContext = lws_create_context(&info);

-        _wsInstance = libwebsocket_client_connect(_wsContext, _host.c_str(), _port, _SSLConnection,
+        _wsInstance = lws_client_connect(_wsContext, _host.c_str(), _port, _SSLConnection,

-int WebSocket::onSocketCallback(struct libwebsocket_context *ctx,
-                     struct libwebsocket *wsi,
-                     enum libwebsocket_callback_reasons reason,
+int WebSocket::onSocketCallback(struct lws *wsi,
+                     enum lws_callback_reasons reason,

-int WebSocket::onSocketCallback(struct libwebsocket_context *ctx,
-                     struct libwebsocket *wsi,
-                     enum libwebsocket_callback_reasons reason,
+int WebSocket::onSocketCallback(struct lws *wsi,
+                     enum lws_callback_reasons reason,

-                libwebsocket_callback_on_writable(ctx, wsi);
+                lws_callback_on_writable(wsi);

-                        enum libwebsocket_write_protocol writeProtocol;
+                        enum lws_write_protocol writeProtocol;

-                        bytesWrite = libwebsocket_write(wsi,  &buf[LWS_SEND_BUFFER_PRE_PADDING], data->len, writeProtocol);
+                        bytesWrite = lws_write(wsi,  &buf[LWS_SEND_BUFFER_PRE_PADDING], data->len, writeProtocol);

-                libwebsocket_callback_on_writable(ctx, wsi);
+                lws_callback_on_writable(wsi);

WebSocketのクラスは大体が参考してるサイトの通り
"libwebsocket"から"lws"への文字列置換と、
onSocketCallbackのインターフェイス修正をすればOK

差し替えが終わったら、Xcodeのバージョンとか設定する画面(General)の
Linked frameworks and Librariesにlibcrypto.aとかlibssl.aを追加する
リンクエラーがでたらここら辺が足りてない可能性あり

感想

最初はgitからcocos2dxを丸ごとcloneしてきたけど、
時間長かったしチェックアウトとかしてめんどくさかったので、
必要な部分だけまとめてみた

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0