| 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 |