internal virtual ReturnCode init(Subscriber subscriber, DataReaderQos drQos, ITopicDescriptionImpl aTopic, string drName) { ReturnCode result = DDS.ReturnCode.Ok; MyDomainId = subscriber.MyDomainId; using (OpenSplice.CustomMarshalers.DataReaderQosMarshaler qosMarshaler = new OpenSplice.CustomMarshalers.DataReaderQosMarshaler()) { result = qosMarshaler.CopyIn(drQos); if (result == ReturnCode.Ok) { using (SequenceStringToCValueArrMarshaler paramsMarshaler = new SequenceStringToCValueArrMarshaler()) { string[] _params = aTopic.rlReq_TopicExpressionParameters; result = paramsMarshaler.CopyIn(_params); if (result == ReturnCode.Ok) { IntPtr uReader = User.DataReader.NewBySQL( subscriber.rlReq_UserPeer, drName, aTopic.rlReq_TopicExpression, paramsMarshaler.UserPtr, _params == null ? 0 : Convert.ToUInt32(_params.Length), qosMarshaler.UserPtr); if (uReader != IntPtr.Zero) { result = base.init(uReader); } else { ReportStack.Report(result, "Could not allocate memory."); result = DDS.ReturnCode.OutOfResources; } } else { ReportStack.Report(result, "Could not create DataReader."); } } } else { ReportStack.Report(result, "Could not copy DataReaderQos."); } } if (result == ReturnCode.Ok) { this.subscriber = subscriber; this.topic = aTopic; aTopic.wlReq_IncrNrUsers(); } return(result); }
internal ReturnCode ValidateFilter(string filterExpression, string[] filterParameters) { ReturnCode result = DDS.ReturnCode.BadParameter; int length = (filterParameters != null) ? filterParameters.Length : 0; IntPtr qExpr = IntPtr.Zero; IntPtr qParams = IntPtr.Zero; ReportStack.Start(); if (length < 100) { qExpr = DDS.OpenSplice.Kernel.Parser.parse(filterExpression); if (qExpr != IntPtr.Zero && length > 0) { SequenceStringToCValueArrMarshaler.CopyIn(filterParameters, ref qParams); } else { ReportStack.Report(result, "ContentFilteredTopic cannot be created. Invalid expression: " + filterExpression); } } else { ReportStack.Report(result, "ContentFilteredTopic cannot be created. Too many parameters " + length + " (max = 99)"); } if (qExpr != IntPtr.Zero) { if (User.Topic.ContentFilterValidate2(rlReq_UserPeer, qExpr, qParams) != 0) { result = DDS.ReturnCode.Ok; } else { ReportStack.Report(result, "ContentFilteredTopic cannot be created. Filter invalid: " + filterExpression); } if (qParams != IntPtr.Zero) { SequenceStringToCValueArrMarshaler.CleanupIn(ref qParams, length); } q.dispose(qExpr); } ReportStack.Flush(this, result != ReturnCode.Ok); return(result); }