rem: var ftpChannel = destChannel.QueryInterface(Components.interfaces.nsIFtpChannel); 
add: var ftpChannel = destChannel.QueryInterface(Components.interfaces.nsIFTPChannel); 
context: function get_destination_channel(destinationDirectoryLocation, fileName, login, password){  try  {    var ioService = GetIOService();    if (!ioService)    {       return;    }    // create a channel for the destination location    var fullurl = destinationDirectoryLocation + fileName;    destChannel = create_channel_from_url(ioService, fullurl, login, password);    if (!destChannel)    {      dump("can't create dest channel\n");      return;    }    try {    dump("about to set callbacks\n");    destChannel.notificationCallbacks = window.docshell;  // docshell    dump("notification callbacks set\n");    }    catch(e) {dump(e+"\n");}        try {       var httpChannel = destChannel.QueryInterface(Components.interfaces.nsIHttpChannel);    }    catch( e )    {       alert( e );    }        if (httpChannel)     {       dump("http channel found\n");       return httpChannel;    }    var ftpChannel = destChannel.QueryInterface(Components.interfaces.nsIFtpChannel);    if (ftpChannel) dump("ftp channel found\n");    if (ftpChannel)      return ftpChannel;        var httpsChannel = destChannel.QueryInterface(Components.interfaces.nsIHttpsChannel);    if (httpsChannel) dump("https channel found\n");    if (httpsChannel)      return httpsChannel;    else      return null;  }  catch (e)  {    return null;  }}
meta: 9421	/local1/tlutelli/issta_data/temp/all_js/javascript/2006_temp/2006/9421/3180ffffad97a60d90f6f073b8f33ce7722fc4fc/publish.js/buggy/calendar/resources/content/publish.js