65 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
Code flow
 | 
						|
=========
 | 
						|
 | 
						|
[X] Command line processing (Command line option can override the place of the
 | 
						|
    configuration file)
 | 
						|
[X] Configuration file processing (Command line options override configuration
 | 
						|
    global values like modules directory, log destination)
 | 
						|
[ ] Create logger thread
 | 
						|
    [ ] Start logging according to configuration
 | 
						|
[ ] Load modules
 | 
						|
    [ ] Load module file
 | 
						|
    [ ] Run initialization function to...
 | 
						|
        [ ] Register extensions
 | 
						|
        [ ] Create special interfaces
 | 
						|
        [ ] Register to hooks
 | 
						|
[ ] Create interfaces
 | 
						|
    [ ] Create listener thread and sockets
 | 
						|
    [ ] Create stream processing threads
 | 
						|
    [ ] Associate stream processing threads with sockets
 | 
						|
    [ ] Assign extensions to stream processing threads
 | 
						|
    [ ] Process extension configuration directives
 | 
						|
    [ ] Start socket thread
 | 
						|
        When new connection arrives
 | 
						|
        [ ] Create peer object
 | 
						|
        [ ] Associate with corresponding stream interface
 | 
						|
[ ] Run main loop
 | 
						|
    [ ] Socket thread
 | 
						|
        [ ] New connections
 | 
						|
	    [ ] Run "before-accept" hook
 | 
						|
	    [ ] Create client object unless connection is dropped in
 | 
						|
	        "before-accept"
 | 
						|
	    [ ] Run "after-accept" hooks
 | 
						|
	    [ ] Install "always-install" extensions on client
 | 
						|
	    [ ] Wait for remote XML Stream to start
 | 
						|
	    [ ] Assign client to correct interface
 | 
						|
	[ ] Old connections
 | 
						|
	    [ ] Run "layer-accept" hooks
 | 
						|
	    [ ] Run "before-interface" hooks
 | 
						|
	    [ ] Pass to assigned interface
 | 
						|
	    [ ] Run "after-interface" hooks
 | 
						|
    [ ] Logging thread
 | 
						|
	[ ] Process received lines one by one. Errors first, info next, debug
 | 
						|
	    last
 | 
						|
    [ ] Interface threads
 | 
						|
        [ ] Receive data from socket thread
 | 
						|
	[ ] Run "before-process" hooks
 | 
						|
	[ ] Process stream
 | 
						|
	[ ] Run "after-process" hooks
 | 
						|
	[ ] Run "before-send" hooks
 | 
						|
	[ ] Send packet to destination if packet is finished
 | 
						|
	[ ] Run "after-send" hooks
 | 
						|
 | 
						|
During the connection additional extensions can be installed on the client,
 | 
						|
like the layer-tls module's TLS encryptions extension.
 | 
						|
 | 
						|
Authentication
 | 
						|
==============
 | 
						|
 | 
						|
When a client requests authentication, client credentials get through the
 | 
						|
authentication module(s) associated with the interface. This authentication
 | 
						|
module must always check the jid via an user storage module, and if necessary,
 | 
						|
it should get the password (or any other credentials like a X509 certificate's
 | 
						|
Common Name field, or a Kerberos principal name) from this storage module,
 | 
						|
either.
 |