| Curl on Symbian OS |
| ================== |
| This is a basic port of curl and libcurl to Symbian OS. The port is |
| a straightforward one using Symbian's P.I.P.S. POSIX compatibility |
| layer, which was first available for OS version 9.1. A more complete |
| port would involve writing a Symbian C++ binding, or wrapping libcurl |
| as a Symbian application server with a C++ API to handle requests |
| from client applications as well as creating a GUI application to allow |
| file transfers. The author has no current plans to do so. |
| |
| This means that integration with standard Symbian OS programs can be |
| tricky, since libcurl isn't designed with Symbian's native asynchronous |
| message passing idioms in mind. However, it may be possible to use libcurl |
| in an active object-based application through libcurl's multi interface. |
| The port is most easily used when porting POSIX applications to Symbian |
| OS using P.I.P.S. (a.k.a. Open C). |
| |
| libcurl is built as a standard Symbian ordinal-linked DLL, and curl is |
| built as a text mode EXE application. They have not been Symbian |
| Signed, which is required in order to install them on most phones. |
| |
| Following are some things to keep in mind when using this port. |
| |
| |
| curl notes |
| ---------- |
| When starting curl in the Windows emulator from the Windows command-line, |
| place a double-dash -- before the first curl command-line option. |
| e.g. \epoc32\release\winscw\udeb\curl -- -v http://localhost/ |
| Failure to do so may mean that some of your options won't be correctly |
| processed. |
| |
| Symbian's ESHELL allows for redirecting stdin and stdout to files, but |
| stderr goes to the epocwind.out file (on the emulator). The standard |
| curl options -o, --stderr and --trace-ascii can be used to |
| redirect output to a file (or stdout) instead. |
| |
| P.I.P.S. doesn't inherit the current working directory at startup from |
| the shell, so relative path names are always relative to |
| C:\Private\f0206442\. |
| |
| P.I.P.S. provides no way to disable echoing of characters as they are |
| entered, so passwords typed in on the console will be visible. It also |
| line buffers keyboard input so interactive telnet sessions are not very |
| feasible. |
| |
| All screen output disappears after curl exits, so after a command completes, |
| curl waits by default for Enter to be pressed before exiting. This behaviour |
| is suppressed when the -s option is given. |
| |
| curl's "home directory" in Symbian is C:\Private\f0206442\. The .curlrc file |
| is read from this directory on startup. |
| |
| |
| libcurl notes |
| ------------- |
| libcurl uses writable static data, so the EPOCALLOWDLLDATA option is |
| used in its MMP file, with the corresponding additional memory usage |
| and limitations on the Windows emulator. |
| |
| curl_global_init() *must* be called (either explicitly or implicitly through |
| calling certain other libcurl functions) before any libcurl functions |
| that could allocate memory (like curl_getenv()). |
| |
| P.I.P.S. doesn't support signals or the alarm() call, so some timeouts |
| (such as the connect timeout) are not honoured. This should not be |
| an issue once support for CURLRES_THREADED is added for Symbian. |
| |
| P.I.P.S. causes a USER:87 panic if certain timeouts much longer than |
| half an hour are selected. |
| |
| LDAP, SCP or SFTP methods are not supported due to lack of support for |
| the dependent libaries on Symbian. |
| |
| gzip and deflate decompression is supported when the appropriate macro |
| is uncommented in the libcurl.mmp file. |
| |
| SSL/TLS encryption is not enabled by default, but it is possible to add |
| when the OpenSSL libraries included in the S60 Open C SDK are available. |
| The appropriate macro in the libcurl.mmp file must be uncommented to |
| enable support. |
| |
| NTLM authentication may not work on some servers due to the lack of |
| MD4 support in the OpenSSL libraries included with Open C. |
| |
| Debug builds are not supported (i.e. --enable-debug) because they cause |
| additional symbol exports in the library which are not frozen in the .def |
| files. |
| |
| |
| Dan Fandrich |
| dan@coneharvesters.com |
| March 2010 |