Exemplo n.º 1
0
int main(int argc, const char * argv[]) {

    iSCSIInitialize(CFRunLoopGetCurrent());

    // Test commands here
    enum iSCSILoginStatusCode statusCode;
    iSCSISessionConfigRef sessCfg = iSCSISessionConfigCreateMutable();
    iSCSIConnectionConfigRef connCfg = iSCSIConnectionConfigCreateMutable();
    CID connectionId;
    SID sessionId;
    iSCSITargetRef target = iSCSITargetCreateMutable();
    iSCSITargetSetName(target,CFSTR("iqn.2012-06.com.example:target0"));
    
    iSCSISetInitiatiorName(CFSTR("iqn.2015-01.com.test"));
    iSCSISetInitiatorAlias(CFSTR("default"));
    
    iSCSIPortalRef portal = iSCSIPortalCreateMutable();
    iSCSIPortalSetAddress(portal,CFSTR("192.168.56.2"));
    iSCSIPortalSetHostInterface(portal,kiSCSIDefaultHostInterface);
    iSCSIPortalSetPort(portal,CFSTR("32"));
    
    
    iSCSIConnectionConfigSetHeaderDigest(connCfg, false);
    iSCSIConnectionConfigSetDataDigest(connCfg, false);
    //    errno_t error = iSCSILoginSession(target,portal,iSCSIAuthCreateCHAP(CFSTR("user"),CFSTR("passwordpassword"),NULL,NULL),sessCfg,connCfg,&sessionId,&connectionId,&statusCode);
    //  enum iSCSILogoutStatusCode sc;
    //  iSCSILogoutSession(0,&sc);
    iSCSIDiscoveryRecRef discRec;
    //   errno_t error = iSCSIQueryPortalForTargets(portal,iSCSIAuthCreateNone(),&discRec,&statusCode);
    iSCSICreateCFPropertiesForSession(target);
    
    
    iSCSICleanup();
    return 0;
}
/*! Retrieves a list of targets available from a give portal.
 *  @param handle a handle to a daemon connection.
 *  @param portal the iSCSI portal to look for targets.
 *  @param authMethod the preferred authentication method.
 *  @param statusCode iSCSI response code indicating operation status.
 *  @return an error code indicating whether the operation was successful. */
errno_t iSCSIDaemonQueryTargetForAuthMethod(iSCSIDaemonHandle handle,
                                            iSCSIPortalRef portal,
                                            CFStringRef targetIQN,
                                            enum iSCSIAuthMethods * authMethod,
                                            enum iSCSILoginStatusCode * statusCode)
{
    // Validate inputs
    if(handle < 0 || !portal || !targetIQN || !authMethod || !statusCode)
        return EINVAL;
    
    // Setup a target object with the target name
    iSCSIMutableTargetRef target = iSCSITargetCreateMutable();
    iSCSITargetSetIQN(target,targetIQN);
    
    // Generate data to transmit (no longer need target object after this)
    CFDataRef targetData = iSCSITargetCreateData(target);
    iSCSITargetRelease(target);
    
    CFDataRef portalData = iSCSIPortalCreateData(portal);
    
    // Create command header to transmit
    iSCSIDMsgQueryTargetForAuthMethodCmd cmd = iSCSIDMsgQueryTargetForAuthMethodCmdInit;
    cmd.portalLength = (UInt32)CFDataGetLength(portalData);
    cmd.targetLength = (UInt32)CFDataGetLength(targetData);
    
    if(iSCSIDaemonSendMsg(handle,(iSCSIDMsgGeneric *)&cmd,targetData,portalData,NULL))
    {
        CFRelease(portalData);
        CFRelease(targetData);
        return EIO;
    }

    CFRelease(portalData);
    CFRelease(targetData);
    iSCSIDMsgQueryTargetForAuthMethodRsp rsp;
    
    if(recv(handle,&rsp,sizeof(rsp),0) != sizeof(rsp))
        return EIO;
    
    *authMethod = rsp.authMethod;
    *statusCode = rsp.statusCode;
    
    return rsp.errorCode;
}