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