How To Setup Apache Server
--------------------------
- mod_netconf compilation requires apache2-devel and libjson-devel packages.

- run following commands in this directory
$ make
# make install

- Add following lines into the (appropriate parts of the ) Apache configuration:
LoadModule netconf_module                 /usr/lib64/apache2/mod_netconf.so

- Start Apache

- For testing, you can run test-client
  - run under the same user as Apache, or change access rights of the
    communication socket (/tmp/pconn.sock) to allow writing.

    
mod_netconf Message Format
--------------------------

UNIX socket (with default path /tmp/mod_netconf.sock) is used for communication
with mod_netconf daemon. Messages are formated using JSON and encoded using
Chunked Framing Mechanism described in RFC6242 (http://tools.ietf.org/html/rfc6242#section-4.2)
with the following content.
Client is free to send multiple requests when the communication socket
to the mod_netconf daemon is opened.

Replies
~~~~~~~
1) OK
key: type (int), value: 0

Optional (for request type 3 - create NETCONF connection):
key: session (string), value: 40 unique characters of session identifier

2) DATA
key: type (int), value: 1
key: data (string)

3) ERROR
key: type (int), value: 2
key: error-message (string)

Optional:
key: error-tag (string)
key: error-type (string)
key: error-severity (string)
key: error-app-tag (string)
key: error-path (string)
key: bad-attribute (string)
key: bad-element (string)
key: bad-namespace (string)
key: session-id (string)

4) INFO
key: type (int), value: 3
key: sid (string), value: session ID
key: version (string), value: NETCONF protocol version
key: host (string), value: hostname of the NETCONF server
key: port (string), value: port of the NETCONF server
key: user (string), value: username of the user holding the NETCONF session
key: capabilities (array of strings), value: list of supported capabilities

Requests
~~~~~~~~
1) Request to create NETCONF session
key: type (int), value: 4
key: user (string)
key: pass (string), value: plain text password

Optional:
key: host (string), "localhost" if not specified
key: port (string), "830" if not specified

2) Request to close NETCONF session
key: type (int), value: 5
key: session (string), value: unique session identifier

3) NETCONF <get>
key: type (int), value: 6
key: session (string), value: unique session identifier

Optional:
key: filter (string), value: xml subtree filter

4) NETCONF <get-config>
key: type (int), value: 7
key: session (string), value: unique session identifier
key: source (string), value: running|startup|candidate

Optional:
key: filter (string), value: xml subtree filter

5) NETCONF <edit-config>
key: type (int), value: 8
key: session (string), value: unique session identifier
key: target (string), value: running|startup|candidate
key: config (string), value: editing configuration data according to NETCONF RFC

Optional:
key: default-operation (string), value: merge|replace|none
key: error-option (string), value: stop-on-error|continue-on-error|rollback-on-error 

6) NETCONF <copy-config>
key: type (int), value: 9
key: session (string), value: unique session identifier
key: target (string), value: running|startup|candidate

Alternating:
key: source (string), value: running|startup|candidate
key: config (string), value: new complete configuration data, if source not specified

7) NETCONF <delete-config>
key: type (int), value: 10
key: session (string), value: unique session identifier
key: target (string), value: running|startup|candidate

8) NETCONF <lock>
key: type (int), value: 11
key: session (string), value: unique session identifier
key: target (string), value: running|startup|candidate

9) NETCONF <unlock>
key: type (int), value: 12
key: session (string), value: unique session identifier
key: target (string), value: running|startup|candidate

10) NETCONF <kill-session>
key: type (int), value: 13
key: session (string), value: unique session identifier
key: session-id (string), value: ID of the session to kill

11) Provide information about NETCONF session
key: type (int), value: 14
key: session (string), value: unique session identifier

12) Perform generic operation not included in base NETCONF
key: type (int), value: 15
key: session (string), value: unique session identifier
key: content (string), value: XML data as content of the NETCONF's <rpc> envelope

13) get-schema
key: type (int), value: 16
key: session (string), value: unique session identifier
key: identifier (string), value: identifier of schema

14) reloadhello Update hello message of NETCONF session
key: type (int), value: 17
key: session (string), value: unique session identifier

15) notif_history Provide list of notifications from past.
key: type (int), value: 18
key: session (string), value: unique session identifier
key: from (int64), value: start time in history
key: to (int64), value: end time

