private static Asn1Sequence RfcResultFactory(int type, int resultCode, string matchedDN, string serverMessage, string[] referrals)
        {
            Asn1Sequence ret;

            if (matchedDN == null)
            {
                matchedDN = "";
            }
            if (serverMessage == null)
            {
                serverMessage = "";
            }

            switch (type)
            {
            case SEARCH_RESULT:
                ret = new RfcSearchResultDone(new Asn1Enumerated(resultCode), new RfcLdapDN(matchedDN), new RfcLdapString(serverMessage), null);
                break;

            case BIND_RESPONSE:
                ret = null;     // Not yet implemented
                break;

            case SEARCH_RESPONSE:
                ret = null;     // Not yet implemented
                break;

            case MODIFY_RESPONSE:
                ret = new RfcModifyResponse(new Asn1Enumerated(resultCode), new RfcLdapDN(matchedDN), new RfcLdapString(serverMessage), null);
                break;

            case ADD_RESPONSE:
                ret = new RfcAddResponse(new Asn1Enumerated(resultCode), new RfcLdapDN(matchedDN), new RfcLdapString(serverMessage), null);
                break;

            case DEL_RESPONSE:
                ret = new RfcDelResponse(new Asn1Enumerated(resultCode), new RfcLdapDN(matchedDN), new RfcLdapString(serverMessage), null);
                break;

            case MODIFY_RDN_RESPONSE:
                ret = new RfcModifyDNResponse(new Asn1Enumerated(resultCode), new RfcLdapDN(matchedDN), new RfcLdapString(serverMessage), null);
                break;

            case COMPARE_RESPONSE:
                ret = new RfcCompareResponse(new Asn1Enumerated(resultCode), new RfcLdapDN(matchedDN), new RfcLdapString(serverMessage), null);
                break;

            case SEARCH_RESULT_REFERENCE:
                ret = null;     // Not yet implemented
                break;

            case EXTENDED_RESPONSE:
                ret = null;     // Not yet implemented
                break;

            default:
                throw new SystemException("Type " + type + " Not Supported");
            }
            return(ret);
        }
        private static Asn1Sequence RfcResultFactory(int type, int resultCode, string matchedDn, string serverMessage)
        {
            Asn1Sequence ret;

            if (matchedDn == null)
            {
                matchedDn = string.Empty;
            }

            if (serverMessage == null)
            {
                serverMessage = string.Empty;
            }

            switch (type)
            {
            case SearchResult:
                ret = new RfcSearchResultDone(new Asn1Enumerated(resultCode), new RfcLdapDn(matchedDn),
                                              new RfcLdapString(serverMessage), null);
                break;

            case BindResponse:
                ret = null;     // Not yet implemented
                break;

            case SearchResponse:
                ret = null;     // Not yet implemented
                break;

            case ModifyResponse:
                ret = new RfcModifyResponse(new Asn1Enumerated(resultCode), new RfcLdapDn(matchedDn),
                                            new RfcLdapString(serverMessage), null);
                break;

            case AddResponse:
                ret = new RfcAddResponse(new Asn1Enumerated(resultCode), new RfcLdapDn(matchedDn),
                                         new RfcLdapString(serverMessage), null);
                break;

            case DelResponse:
                ret = new RfcDelResponse(new Asn1Enumerated(resultCode), new RfcLdapDn(matchedDn),
                                         new RfcLdapString(serverMessage), null);
                break;

            case ModifyRdnResponse:
                ret = new RfcModifyDnResponse(new Asn1Enumerated(resultCode), new RfcLdapDn(matchedDn),
                                              new RfcLdapString(serverMessage), null);
                break;

            case CompareResponse:
                ret = new RfcCompareResponse(new Asn1Enumerated(resultCode), new RfcLdapDn(matchedDn),
                                             new RfcLdapString(serverMessage), null);
                break;

            case SearchResultReference:
                ret = null;     // Not yet implemented
                break;

            case ExtendedResponse:
                ret = null;     // Not yet implemented
                break;

            default:
                throw new Exception("Type " + type + " Not Supported");
            }

            return(ret);
        }