CallBack

Ramkumar Nagabhushanam ramkumar at aapt.net.au
Sat Mar 4 17:54:42 EST 2006


Hello All,
I am trying to integrate the ftpclient (in ftplib) with an application that
has been written I C/C++.
I am able to delete,send change working directories etc. When I receive data
back from the server i.e. Retrieve files, get a directory listing) I want to
pass a callback function to the ftpclient so that the output does not get
displayed on stdout. The code I have written is as shown below. Can anyone
out there give me advise on how to write "c_function" that is called in
ftpTest::DoesFileExist ?Any help will be most appreciated. The code runs
under windows and is compiled with VC++ 6.0. THe code is as shown below.
Regards,
Ram
 
>>>>>>>>>>>>>>>>>>> CODE START >>>>>>>>>>>>>>>>>>>
// test.cpp : Defines the entry point for the console application.
//
#include <iostream>
#include <string>
#include <fstream>
#include <sstream>
#include <direct.h>
#include "C:\Python24\include\Python.h"
 
Class ftpTest
{
Private:
 PyObject *_FTP;
 PyObject *_callBack;
 
Public:
 FtpTest (const char * ipAddress, const char * username, const char *
password); // Open the FTP connection, Initialize python interpreter
 ~ftpTest (); // Close connection and finalize python interpreter
 Int Close ();
 Int GetFile (const char * fileName);
 Int PutFile (const char * fileName);
 Int ChangeDir (const char * dirName);
 Int DoesFileExist (const char * fileName);
 Int DeleteFile (const char * fileName);
 Int ChangePermissions (const char * fileName, const char * permissions);
};
 
FtpTest::ftpTest (const char * ipAddress, const char * username, const char
* password)
{
 PyObject *modname, *mod, *func, *mdict, *pArgs, *pValue;
 
 // Initialize the python interpreter
 Py_Initialize();
 
 Modname = PyString_FromString("ftplib");
 
 If (modname == NULL)
 {
  // Log an error
 }
 Else
 {
  Mod = PyImport_Import (modname);
 }
 
 If (mod)
 {
  Mdict = PyModule_GetDict (mod);
  Func = PyDict_GetItemString (mdict, "FTP");
  If (func)
  {
   Printf ("I am here -- 1\n");
  }
 
  Const char *arguments[] = {ipAddress, username, password};
 
  PArgs = PyTuple_New (3);
        For (int I = 0; I < 3; ++I) 
  {
            PValue = PyString_FromString(arguments[I]);
            If (!pValue) 
   {
                Py_DECREF(pArgs);
                Py_DECREF(mod);
            }
            /* pValue reference stolen here: */
            PyTuple_SetItem(pArgs, I, pValue);
        }
 
  _FTP = PyObject_CallObject (func, pArgs);
 
  If (_FTP != NULL)
  {
   Printf ("I am here -- 2\n");
  }
 }
}
 
FtpTest::~ftpTest ()
{
 //Py_Finalize();
}
 
Int ftpTest::Close ()
{
 Return (1);
}
 
Int ftpTest::ChangeDir (const char * dirName)
{
 PyObject *t = PyObject_CallMethod (_FTP, "cwd", "(S)", dirName);
 Return (1);
}
 
Int ftpTest::DeleteFile (const char * fileName)
{
 PyObject *t = PyObject_CallMethod (_FTP, "delete", "(S)", fileName);
 Return (1);
}
 
Int ftpTest::PutFile (const char * fileName)
{
 PyObject * py_file = PyFile_FromString ((char *)fileName, "rb"); 
 Std::string S("STOR ");
 s += fileName;
 PyObject * t = PyObject_CallMethod (_FTP, "storlines", "(sO)", S.c_str(),
py_file);
 Return (1);
}
 
Int ftpTest::ChangePermissions (const char * fileName, const char *
permissions)
{
 Std::string S("SITE");
 s += " chmod ";
 s += permissions;
 s += " ";
 s += fileName;
 PyObject * t = PyObject_CallMethod (_FTP, "sendcmd", "(S)", S.c_str());
 Return (1);
}
 
Int ftpTest::GetFile (const char * fileName)
{
// TODO: Implement callback
#if 0
 PyObject *t = PyObject_CallMethod (_FTP, "retrlines", "(S)", "RETR ram.txt
);
#endif
 Return (1);
}
 
PyObject * c_function(char * data)
{
 // Process the data received in "data"
 Return (NULL);
}
 
Int ftpTest::DoesFileExist (const char * fileName)
{
 // Just get the list
 PyObject *t = PyObject_CallMethod (_FTP, "retrlines", "(sO)", "LIST",
c_function);
 If (t == NULL)
 {
  Printf ("I am here -- 4\n");
 }
 Return (1);
}
 
Int main ()
{
 FtpTest ftpClient("127.0.0.1", "xxx", "yyyy");
 FtpClient.DoesFileExist(NULL);
 Return (1);
}

>>>>>>>>>>>>>>>>>>> CODE END >>>>>>>>>>>>>>>>>>>>>



More information about the Python-list mailing list