lh | 9ed821d | 2023-04-07 01:36:19 -0700 | [diff] [blame] | 1 | Curl on Symbian OS |
| 2 | ================== |
| 3 | This is a basic port of curl and libcurl to Symbian OS. The port is |
| 4 | a straightforward one using Symbian's P.I.P.S. POSIX compatibility |
| 5 | layer, which was first available for OS version 9.1. A more complete |
| 6 | port would involve writing a Symbian C++ binding, or wrapping libcurl |
| 7 | as a Symbian application server with a C++ API to handle requests |
| 8 | from client applications as well as creating a GUI application to allow |
| 9 | file transfers. The author has no current plans to do so. |
| 10 | |
| 11 | This means that integration with standard Symbian OS programs can be |
| 12 | tricky, since libcurl isn't designed with Symbian's native asynchronous |
| 13 | message passing idioms in mind. However, it may be possible to use libcurl |
| 14 | in an active object-based application through libcurl's multi interface. |
| 15 | The port is most easily used when porting POSIX applications to Symbian |
| 16 | OS using P.I.P.S. (a.k.a. Open C). |
| 17 | |
| 18 | libcurl is built as a standard Symbian ordinal-linked DLL, and curl is |
| 19 | built as a text mode EXE application. They have not been Symbian |
| 20 | Signed, which is required in order to install them on most phones. |
| 21 | |
| 22 | Following are some things to keep in mind when using this port. |
| 23 | |
| 24 | |
| 25 | curl notes |
| 26 | ---------- |
| 27 | When starting curl in the Windows emulator from the Windows command-line, |
| 28 | place a double-dash -- before the first curl command-line option. |
| 29 | e.g. \epoc32\release\winscw\udeb\curl -- -v http://localhost/ |
| 30 | Failure to do so may mean that some of your options won't be correctly |
| 31 | processed. |
| 32 | |
| 33 | Symbian's ESHELL allows for redirecting stdin and stdout to files, but |
| 34 | stderr goes to the epocwind.out file (on the emulator). The standard |
| 35 | curl options -o, --stderr and --trace-ascii can be used to |
| 36 | redirect output to a file (or stdout) instead. |
| 37 | |
| 38 | P.I.P.S. doesn't inherit the current working directory at startup from |
| 39 | the shell, so relative path names are always relative to |
| 40 | C:\Private\f0206442\. |
| 41 | |
| 42 | P.I.P.S. provides no way to disable echoing of characters as they are |
| 43 | entered, so passwords typed in on the console will be visible. It also |
| 44 | line buffers keyboard input so interactive telnet sessions are not very |
| 45 | feasible. |
| 46 | |
| 47 | All screen output disappears after curl exits, so after a command completes, |
| 48 | curl waits by default for Enter to be pressed before exiting. This behaviour |
| 49 | is suppressed when the -s option is given. |
| 50 | |
| 51 | curl's "home directory" in Symbian is C:\Private\f0206442\. The .curlrc file |
| 52 | is read from this directory on startup. |
| 53 | |
| 54 | |
| 55 | libcurl notes |
| 56 | ------------- |
| 57 | libcurl uses writable static data, so the EPOCALLOWDLLDATA option is |
| 58 | used in its MMP file, with the corresponding additional memory usage |
| 59 | and limitations on the Windows emulator. |
| 60 | |
| 61 | curl_global_init() *must* be called (either explicitly or implicitly through |
| 62 | calling certain other libcurl functions) before any libcurl functions |
| 63 | that could allocate memory (like curl_getenv()). |
| 64 | |
| 65 | P.I.P.S. doesn't support signals or the alarm() call, so some timeouts |
| 66 | (such as the connect timeout) are not honoured. This should not be |
| 67 | an issue once support for CURLRES_THREADED is added for Symbian. |
| 68 | |
| 69 | P.I.P.S. causes a USER:87 panic if certain timeouts much longer than |
| 70 | half an hour are selected. |
| 71 | |
| 72 | LDAP, SCP or SFTP methods are not supported due to lack of support for |
| 73 | the dependent libraries on Symbian. |
| 74 | |
| 75 | gzip and deflate decompression is supported when the appropriate macro |
| 76 | is uncommented in the libcurl.mmp file. |
| 77 | |
| 78 | SSL/TLS encryption is not enabled by default, but it is possible to add |
| 79 | when the OpenSSL libraries included in the S60 Open C SDK are available. |
| 80 | The appropriate macro in the libcurl.mmp file must be uncommented to |
| 81 | enable support. |
| 82 | |
| 83 | NTLM authentication may not work on some servers due to the lack of |
| 84 | MD4 support in the OpenSSL libraries included with Open C. |
| 85 | |
| 86 | Debug builds are not supported (i.e. --enable-debug) because they cause |
| 87 | additional symbol exports in the library which are not frozen in the .def |
| 88 | files. |
| 89 | |
| 90 | |
| 91 | Dan Fandrich |
| 92 | dan@coneharvesters.com |
| 93 | March 2010 |