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
