
Extending pysmb For Other Frameworks
====================================

This page briefly describes the steps involved in extending pysmb for other frameworks.

In general, you need to take care of the SMB TCP connection setup, i.e. finding the IP address of the remote server and connect to the SMB/CIFS service.
Then you need to read/write synchronously or asynchronously from and to the SMB socket. And you need to handle post-authentication callback methods, and from these methods,
initiate file operations with the remote SMB/CIFS server.

Now the above steps in more technical details:
 1. Create a new class which subclasses the *smb.base.SMB* class. Most often, the connection setup will be part of the *__init__* method.
 2. Override the *write(self, data)* method to provide an implementation which will write *data* to the socket.
 3. Write your own loop handling method to read data from the socket. Once data have been read, call *feedData* method with the parameter.
    The *feedData* method has its own internal buffer, so it can accept incomplete NetBIOS session packet data.
 4. Override
 
   * *onAuthOK* method to include your own operations to perform when authentication is successful. You can initiate file operations in this method.
   * *onAuthFailed* method to include your own processing on what to do when authentication fails. You can report this as an error, or to try a different NTLM authentication algorithm (*use_ntlm_v2* parameter in the constructor).
   * *onNMBSessionFailed* method to include your own processing on what to do when pysmb fails to setup the NetBIOS session with the remote server. Usually, this is due to a wrong *remote_name* parameter in the constructor.
