@@ -198,26 +198,25 @@ CurrentSegmentSpanPtr SegmentContextImpl::createCurrentSegmentRootSpan() {
198198 return createCurrentSegmentSpan (nullptr );
199199}
200200
201- std::string SegmentContextImpl::createSW8HeaderValue (
202- CurrentSegmentSpanPtr parent_span, const std::string& target_address) {
203- if (parent_span == nullptr ) {
201+ std::optional<std::string> SegmentContextImpl::createSW8HeaderValue (
202+ CurrentSegmentSpanPtr parent_span, const std::string_view target_address) {
203+ CurrentSegmentSpanPtr target_span = parent_span;
204+ if (target_span == nullptr ) {
204205 if (spans_.empty ()) {
205206 throw TracerException (
206207 " Can't create propagation header because current segment has no "
207208 " valid span." );
208209 }
209- return encodeSpan ( spans_.back (), target_address );
210+ target_span = spans_.back ();
210211 }
211- return encodeSpan (parent_span, target_address);
212- }
213-
214- std::string SegmentContextImpl::createSW8HeaderValue (
215- CurrentSegmentSpanPtr parent_span, std::string&& target_address) {
216- return createSW8HeaderValue (parent_span, target_address);
212+ if (target_span->spanType () != SpanType::Exit) {
213+ return std::nullopt ;
214+ }
215+ return encodeSpan (target_span, target_address);
217216}
218217
219218std::string SegmentContextImpl::encodeSpan (CurrentSegmentSpanPtr parent_span,
220- const std::string& target_address) {
219+ const std::string_view target_address) {
221220 assert (parent_span);
222221 std::string header_value;
223222
@@ -232,7 +231,7 @@ std::string SegmentContextImpl::encodeSpan(CurrentSegmentSpanPtr parent_span,
232231 header_value += Base64::encode (service_) + " -" ;
233232 header_value += Base64::encode (service_instance_) + " -" ;
234233 header_value += Base64::encode (endpoint) + " -" ;
235- header_value += Base64::encode (target_address);
234+ header_value += Base64::encode (target_address. data () );
236235
237236 return header_value;
238237}
0 commit comments